Technician Geschrieben 28. Januar 2002 Geschrieben 28. Januar 2002 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... Zitieren
Gast King555 Geschrieben 28. Januar 2002 Geschrieben 28. Januar 2002 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? Zitieren
Technician Geschrieben 28. Januar 2002 Autor Geschrieben 28. Januar 2002 Hi! ich probier's gleich mal aus! Gruß, Technician Zitieren
Technician Geschrieben 28. Januar 2002 Autor Geschrieben 28. Januar 2002 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 Zitieren
Gast King555 Geschrieben 28. Januar 2002 Geschrieben 28. Januar 2002 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 Zitieren
Technician Geschrieben 28. Januar 2002 Autor Geschrieben 28. Januar 2002 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 Zitieren
E-Sorcerer Geschrieben 28. Januar 2002 Geschrieben 28. Januar 2002 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? Zitieren
Technician Geschrieben 28. Januar 2002 Autor Geschrieben 28. Januar 2002 @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 Zitieren
JazzByte Geschrieben 29. Januar 2002 Geschrieben 29. Januar 2002 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. Zitieren
Technician Geschrieben 29. Januar 2002 Autor Geschrieben 29. Januar 2002 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! Zitieren
JazzByte Geschrieben 30. Januar 2002 Geschrieben 30. Januar 2002 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. Zitieren
Technician Geschrieben 31. Januar 2002 Autor Geschrieben 31. Januar 2002 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 Zitieren
E-Sorcerer Geschrieben 4. Februar 2002 Geschrieben 4. Februar 2002 @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 Zitieren
Technician Geschrieben 4. Februar 2002 Autor Geschrieben 4. Februar 2002 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 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.