Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit VB-Funktion (is schwer zu erklären...)

Empfohlene Antworten

Veröffentlicht

Hallo!

Ich verwende in meinem Programm (progge mit VB6.0) anstelle der Messageboxes eigene Formulare.

Und ich hab da ein kleines, aber echt fieses Problemchen:

Nehmen wir an, ich hab da einen Button "btnBeenden" zum Beenden meines Programms:

Der bei "btnBeenden" hinterlegte Code sieht wie folgt aus:

mess = callMessage("Programm wirklich beenden?", False, False, 2)

If messBack = "Nein" Then

ElseIf messBack = "Ja" Then

End

End If

callMessage ruft eine Message-Form mit Parametern auf.

Die Message-Form sieht weitestgehend wie eine Messagebox aus; sie verfügt ebenfalls über eine Ja- und Nein-Schaltfläche

Wird "Ja" geklickt, so wird die globale Variable messBack auf "Ja" gesetzt; analog dazu bei "Nein".

Mein Problem nun:

Der Code, der beim Button " btnBeenden " hinterlegt ist, ruft wie gewünscht die Funktion "callMessage" auf, sodass die Message-Form mit dem entsprechenden Messagetext dargestellt wird.

Nun wird aber leider vom Code hinter "MeinButton" sofort die y/n-Auswertung vorgenommen, obwohl der "N" bzw. "Y"-Button noch gar nicht gedrückt wurde.

Die Ja-Nein-Auswertung kann ich nicht bei den Ja-Nein-Buttons der Message-Form hinterlegen, da ich nicht für jede Meldung eine eigene Message-Form haben will (das wäre dann nämlich schlechter Programmierstil!).

Wie kann ich der Funktion hinter "btnBeenden" sagen "werte erst aus, wenn einer der Buttons gedrückt wurde"????

Vielen, vielen Dank für alles was mich weiter bringt,

Technician

P.S.: Ich kann wirklich keine Messageboxes verwenden, weil ich auf der Message-Form einiges unterbringen muss, was bei einer Messagebox nicht geht...

Du musst dein eigenes Messagebox Formular modal aufrufen.

Beispiel:

MsgBox "Hallo"

Form1.Show vbModal

MsgBox "Welt"

Nun wird erst eine MessageBox mit "Hallo" angezeigt, dann wird das Formular Form1 gezeigt und erst nach dem Schließen von Form1 sieht man die MessagBox mit "Welt".

Ungefähr verstanden?

Hi!

ich probier's gleich mal aus!

Gruß,

Technician

Hi!

das mit dem vbmodal hat so nicht funktioniert...

ich poste dir mal meinen beispielcode:

Form1:

Private Sub cmdBeenden_Click()

mess = callMessage()

If messBack = "Nein" Then

ElseIf messBack = "Ja" Then

End

End If

End Sub

-----------

Form2: (die Message)

Private Sub cmdn_Click()

messBack = "Nein"

Unload Me

End Sub

Private Sub cmdy_Click()

messBack = "Ja"

Unload Me

End Sub

--------------

bas-Modul:

Dim messBack As String

Dim mess

Function callMessage()

Form2.Show vbModal

End Function

+++++++++++++++++

Was mach ich falsch? :)

Gruß,

Technician

Versuch das ganze mal wie folgt umzuändern:

'-----------

'Form1:

'-----------

Private Sub cmdBeenden_Click()

callMessage

If messBack = "Ja" Then

End

End If

End Sub

'-----------

'Form2:

'-----------

Private Sub cmdn_Click()

messBack = "Nein"

Unload Me

End Sub

Private Sub cmdy_Click()

messBack = "Ja"

Unload Me

End Sub

'-----------

'Modul:

'-----------

Public messBack As String

Public Sub callMessage()

Form2.Show vbModal

End Sub

Hi!

Jetzt geht's!

Dann werd ich eben die Parameter nicht mehr in ner Function setzen sondern davor - ist auch egal, da das sowieso über globale Variablen läuft.

TNX,

Technician

moin, ichhab das mal probiert und beimir tut's...

Form 1:

---------

Option Explicit

Private Sub cmdBox_Click()

Dim mess As String

mess = callBox("Testtext")

If messBack = "Nein" Then

ElseIf messBack = "Ja" Then

End

End If

End Sub

Form 2:

---------

Option Explicit

Private Sub cmdJa_Click()

messBack = "Ja"

Unload Me

End Sub

Private Sub cmdNein_Click()

messBack = "Nein"

Unload Me

End Sub

Module1:

------------

Option Explicit

Public messBack As String

Public Function callBox(ByVal Text As String)

Dim rc As String

Load Form2

Form2.Label1.Caption = Text

Form2.Show vbModal

callBox = rc

End Function

Er arbeitet erst weiter wenn Form2 (Messagebox) entladen ist und der Inhalt von MessBack ausgewertet ist.

Das war's doch was du wolltest oder?

@E-Sorcerer

Du hast gewonnen:D

Ich nehm deins, dann muss ich nicht überall auf "vorher initialisieren" umstellen :)

Den Tipp hätt ich schon gestern gut brauchen können, dann wären nicht so viele Flüche aus meinem Arbeitszimmer gekommen ;)

Gruß und Danke,

Technician

Huhuuu!

Vorsicht bei der Function.

Hier ist der Rückgabe-Typ nicht definiert - also VARIANT.

Entweder "As Variant" in die Funktionsdekl. aufnehmen oder noch besser mit 'nem numerischen Typ arbeiten und Zustände über Konstanten oder Enums definieren.

So wird's für später deutlich übersichtlicher.

Außerdem wird "rc" innerhalb von der Funktion nicht gesetzt. So wie's oben steht kann's nicht ganz funktioklappern.

Gruß,

JazzByte.

Original geschrieben von JazzByte

Huhuuu!

Vorsicht bei der Function.

Hier ist der Rückgabe-Typ nicht definiert - also VARIANT.

Entweder "As Variant" in die Funktionsdekl. aufnehmen oder noch besser mit 'nem numerischen Typ arbeiten und Zustände über Konstanten oder Enums definieren.

So wird's für später deutlich übersichtlicher.

Außerdem wird "rc" innerhalb von der Funktion nicht gesetzt. So wie's oben steht kann's nicht ganz funktioklappern.

Gruß,

JazzByte.

Also, bei mir funktioniert's wunderbar!

High nochmal!

Ich ich meinte diesen Teil:

Module1:

------------

Option Explicit

Public messBack As String

Public Function callBox(ByVal Text As String)

Dim rc As String

Load Form2

Form2.Label1.Caption = Text

Form2.Show vbModal

callBox = rc

End Function

Innerhalb von callBox wird rc nicht versorgt. rc wird mit Dim lokal deklariert und als Funktionsrückgabe verwendet. So wie's oben steht, müßte rc bzw. der Rückgabewert immer 0 sein.

Gruß,

JazzByte.

Original geschrieben von JazzByte

High nochmal!

Ich ich meinte diesen Teil:

Module1:

------------

Option Explicit

Public messBack As String

Public Function callBox(ByVal Text As String)

Dim rc As String

Load Form2

Form2.Label1.Caption = Text

Form2.Show vbModal

callBox = rc

End Function

Innerhalb von callBox wird rc nicht versorgt. rc wird mit Dim lokal deklariert und als Funktionsrückgabe verwendet. So wie's oben steht, müßte rc bzw. der Rückgabewert immer 0 sein.

Gruß,

JazzByte.

Hi JazzByte,

danke nochmal, aber ich hab' den Code hier getestet und dann auch in mein Projekt eingefügt und es funktioniert; den rc-Rückgabewert braucht's ja auch gar nicht:) :cool:

Gruß,

Technician

@Jazz

Stimmt den RC hab ich net gepflegt...

War aber auch net nötig...

War halt nur so 2min runterschreiben des Codes... :-)

Genau wie mit dem Rückgabewert der Funktion.

Normalerweise sollte man das natürlich nicht mit Variant machen und den RC sollte man auch pflegen (@Technician: Wenn Du das für ein Projekt brauchst würd' ich das noch nachpflegen, ich wollte nur deutlich machen das das Grundproblem so gelöst werden kann).

OK,

C Ya

and 3mal Kölle AllaaaaaF!!!! :OD

Original geschrieben von E-Sorcerer

Technician: Wenn Du das für ein Projekt brauchst würd' ich das noch nachpflegen, ich wollte nur deutlich machen das das Grundproblem so gelöst werden kann

Nein, brauchst nix mehr ändern; mir ging's vor allem um die vbModal-Geschichte; das mit den ganzen Werte-Rückgaben und so hab ich sowieso ein kleines bisschen anders gelöst als in dem von mir geposteten Fehlercode; ich hab halt auch vereinfacht um das Grundproblem darzustellen (wollt nicht seitenweise Code posten).

Ich progge sowieso schon wieder an nem ganz anderen Teil-Programm meines Projekts :)

Gruß,

Technician

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.