Die Community zu .NET und Classic VB.
Menü

FAQ 0060: Wie arbeite ich mit einer Inputbox?

 von 

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

Listing 1: Eingabe des Benutzers abfragen

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

Listing 2: Eingabe unkenntlich machen

'   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

Listing 3: Beispiel eines Aufrufs

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.