Rubrik: Verschiedenes / Sonstiges | VB-Versionen: VB5, VB6 | 05.12.01 |
InputBox: Welcher Button wurde gedrückt? OK oder Abbrechen - das ist hier die Frage - und zwar immer dann, wenn der Rückgabewert der InputBox ein Leerstring ist. | ||
Autor: Dieter Otter | Bewertung: | Views: 26.977 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Sicher kennen auch Sie die Standard InputBox. Sie ist zwar nicht sonderlich flexibel, aber hin- und wieder lässt sie sich doch sinnvoll einsetzen.
Nun fordert man also den Anwender auf, irgendeine Eingabe zu machen - über die InputBox. Die InputBox-Funktion selbst liefert im Rückgabewert den eingegebenen Text. Solange dieser nicht "leer" ist, ist klar: OK wurde gewählt.
Was aber, wenn der Rückgabewert eine leere Zeichenfolge ist? Wurde die InputBox nun per OK oder per Abbrechen beendet? Keine Ahnung, denn: Klickt der Anwender auf den Abbrechen-Knopf, so gibt die InputBox-Funktion einen Leerstring zurück. Gibt der Anwender keinen Text ein und klickt auf den OK-Knopf, so wird ebenfalls ein Leerstring zurückgegeben.
Wie soll man nun herausfinden, welcher Button tatsächlich gewählt wurde?
Klar, in diesem Fall fragen wir den Anwender per MsgBox: "Haben Sie OK oder Abbrechen gewählt?" Nein, Scherz beiseite
Es gibt auch eine elegantere Lösung. Und zwar muss man wissen, dass unterschieden wird zwischen leerer Zeichenkette ("") und Null-String. Klickt der Anwender auf Abbrechen, wird eben ein Nullstring (vbNullString) zurückgegeben.
Leider ist das Ergebnis der InputBox in beiden Fällen eine leere Zeichenkette ("") - zumindest hat dies den Anschein. Wenn da nicht die StrPtr-Funktion wäre. Mit Hilfe dieser Funktion lässt sich nämlich feststellen, ob es sich um eine Zeichenkette oder einen Null-String handelt. Übergibt man der StrPtr-Funktion den Rückgabewert der InputBox, so liefert diese als Ergebnis 0, wenn es sich um einen Null-String handelt. Somit lässt sich also doch unterscheiden, ob der Anwender auf "Abbrechen" geklickt oder keinen Text in das Eingabefeld eingegeben hat.
Dim myInput As String myInput InputBox("Wie alt sind Sie?", "Alter", "") If StrPtr(myInput) = 0 Then MsgBox "Abbrechen wurde gewählt!" Else If myInput = "" Then MsgBox "Keine Angabe bzgl. des Alters!" Else MsgBox "Aha... " & myInput & " Jahre also!" End if End If