Zum Inhalt springen

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


Technician

Empfohlene Beiträge

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...