FAQ 0060: Wie arbeite ich mit einer Inputbox?
von Helge Rex
Frage
Wurde eine Inputbox mit "Abbrechen" geschlossen?
Wie kann ich die Eingabe unkenntlich machen?
Abbrechen abfragen
Wenn der Benutzer den Dialog abbricht, wird ein String zurückgegeben, dessen Datenzeiger auf 0 gesetzt ist (Beispiel von Achim Neubauer).
Dim strResult As String strResult = InputBox("Bitte geben sie einen Wert an:", _ "Benutzereingabe", vbNullString) If StrPtr(strResult) = 0 Then Call MsgBox("Benutzer hat Dialog abgebrochen.", _ vbOKOnly Or vbInformation) Else Call MsgBox "Benutzer hat Dialog bestätigt.", _ vbOKOnly Or vbInformation) End If
Eingabe unkenntlich machen
Die Inputbox bietet von Haus aus keine Möglichkeit, die Eingabe in ihrer Eingabezeile unkenntlich zu machen.
Folgender Quelltext erledigt dies ( Quelle: experts-exchange.com):
' Module1 '----------------------------------------------------------------------- ' ' Inputbox mit PasswordChar ' ' nach ' ' www.experts-exchange.com/Programming/Programming_Languages/ ' Visual_Basic/Q_20279227.html '----------------------------------------------------------------------- Option Explicit Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function FindWindowEx Lib "user32" _ Alias "FindWindowExA" ( _ ByVal hWnd1 As Long, _ ByVal hWnd2 As Long, _ ByVal lpsz1 As String, _ ByVal lpsz2 As String) As Long Private Declare Function SetTimer Lib "user32" ( _ ByVal hwnd As Long, _ ByVal nIDEvent As Long, _ ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" ( _ ByVal hwnd As Long, _ ByVal nIDEvent As Long) As Long Private Declare Function SendMessageLongRef Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Long) As Long Private Const EM_SETPASSWORDCHAR As Long = &HCC& Private Const NV_INPUTBOX As Long = &H5000& Private lngPwdChar As Long '----------------------------------------------------------------------- ' einer Inputbox ein PasswordChar verpassen, Timer gesteuert ' Aufruf InputBoxSetPasswordChar Me, "#" ' Pwd = InputBox("Enter Password") '----------------------------------------------------------------------- Public Sub InputBoxSetPasswordChar( _ ParentForm As Form, _ Optional PasswordChar As String = "*", _ Optional WaitMilliSeconds As Long = 100) lngPwdChar = Asc(PasswordChar) Call SetTimer(ParentForm.hwnd, NV_INPUTBOX, WaitMilliSeconds, _ AddressOf TimerProc) End Sub '----------------------------------------------------------------------- ' der Inputbox ein PasswordChar zu verpassen '----------------------------------------------------------------------- Private Sub TimerProc( _ ByVal hwnd As Long, _ ByVal uMsg As Long, _ ByVal idEvent As Long, _ ByVal dwTime As Long) Dim EditHwnd As Long ' Window bestimmen EditHwnd = FindWindowEx(FindWindow("#32770", App.Title), _ 0, "Edit", "") ' das PwdChar überstellen Call SendMessageLongRef(EditHwnd, EM_SETPASSWORDCHAR, lngPwdChar, 0) ' Timer beenden KillTimer hwnd, idEvent End Sub
' Form1 Option Explicit Private Sub Command1_Click() Dim Pwd As String Call InputBoxSetPasswordChar(Me, "#") Pwd = InputBox("Enter Password") If StrPtr(Pwd) = 0 Then ' Abbruch gewählt Exit Sub End If Print Pwd End Sub
Ihre Meinung
Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.