Passwort bei Eingabe sichtbar und dann in * Anzeigen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Passwort bei Eingabe sichtbar und dann in * Anzeigen

    Hallo ich habe Aktuell eine Funktion die es mir erlaubt die Eingabe der Textbox auszulesen und diese in einen Label Anzuzeigen, das Funktioniert auch wie gewünscht. Jedoch wird das Label immer Angezeigt, ich hätte es aber lieber so das es nicht mehr Sichtbar ist wenn jemand die Eingabe beendet hat.
    Aktuell habe ich es wie Folgt Realisiert: (Wenn ihr eine andere Idee habt, wie man es umsetzt immer her damit, (Nur nicht mit einen Timer, das ist unschön und will ich vermeiden!))

    VB.NET-Quellcode

    1. Public Class save2
    2. Private Sub save2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Label1.Text = "Password"
    4. FormBorderStyle = FormBorderStyle.None
    5. Label2.Visible = False ' Das Label zeigt immer den letzen eingegebenen Buchstaben an.
    6. End Sub
    7. Private Sub Textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress 'Für die Entertaste,
    8. Dim intBS As Integer
    9. intBS = Asc(e.KeyChar)
    10. If intBS = 13 Then
    11. Me.Button1_Click(sender, e)
    12. End If
    13. End Sub
    14. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    15. Label2.Visible = True
    16. TextBox1.Enabled = True
    17. If TextBox1.TextLength >= 1 Then ' Liest die Textlänge und gibt den letzten Buchstaben an Label2 weiter.
    18. Label2.Text = (TextBox1.Text.Substring(TextBox1.TextLength - 1, 1))
    19. End If
    20. Label2.Refresh() ' Aktualisiert das Label bei Eingabe neuer Daten
    21. End Sub
    22. Private Sub TextBox1_LostFocus(sender As Object, e As EventArgs) Handles TextBox1.LostFocus ' Wenn die Textbox nicht mehr im Fokus ist ist Label2 unsichtbar. Und genau hier zu hätte ich gerne andere Ideen. Wie man Label2 Unsichtbar macht wenn keine Eingabe mehr erfolgt.
    23. Label2.Visible = False
    24. End Sub
    25. End Class


    Hier in dem Beispiel habe ich keine Änderungen der Benennung der Controls drin. Da es nur als Beispiel dient, um zu zeigen worum es geht. :D
    Legende:
    Textbox1 -> Eingabe als Password Char (*)
    Label2 -> Erst unsichtbar und bei Eingabe sichtbar
    Hallo @Andy2002

    Man könnte eine Verzögerung einbauen mit Thread.Sleep(200) zwischen Zeile 24+25 und nachher das Label gleich wieder zurücksetzen mit Label2.Text = String.Empty.
    Der letzte Buchstabe wird also nur immer ganz kurz im Label gezeigt und wieder gelöscht.null
    Label2.TextChanged gäbe es auch noch, ist wahrscheinlich aber keine Lösung, weil beim Zurücksetzen der Event wieder anspringt.

    Wenn das Label komplett verschwinden soll, dann mit Label2.Visible=false/true arbeiten.


    Freundliche Grüsse

    exc-jdbi
    @Andy2002 Wenn Du nur das letzte eingegebene Zeichen anzeigen willst, nimm das KeyDown-Event, da musst Du nicht rumrechnen, um das letzte Zeichen zu ermitteln.
    ZUr Anzeige-Steuerung sieh Dir auch die Events Enter und Leave an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    *Vollzitat entfernt*

    Hmm also mit den Textbox.keydown event, habe ich noch nie gearbeitet. Muss ich mal experimentieren.. :)

    Edit: Hmm also die Idee von @exc-jdbi und @RodFromGermany haben leider bisher zu keinen "guten" Ergebnis geführt.
    Nutze ich zb. Den Thread.Sleep(200) in der If Schleife Ruckelt die Eingabe, und Label2.Text = String.Empty hatte zur Folge das das Label gar nicht mehr Angezeigt wurde. Also vielleicht hab ich es Falsch Positioniert, (Nach der End if)
    Und wie gesagt mit Keydown hab ich noch nicht gearbeitet. Wenn ich im event, Label2.Text = Textbox1.text.tostring eingebe, Zählt das Label die Eingabe als Zahl :)
    (Auch ne nette Funktion die ich so noch nicht kannte. Gut für Formulare mit begrenzten Zeichen Inhalt. :)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hat mich kurz wundergenommen, ob man das irgendwie lösen kann. Habs jetzt aber trotzdem mit einem Timer gelöst, der sich auch immer wieder zurücksetzt.

    Freundliche Grüsse

    exc-jdbi
    Dateien

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    @Andy2002 Im KeyDown-Event bekommst Du die gerade gedrückte Taste als KeyChar und als KeyaCode übergeben.
    Mach Dir ein neues kleines Testprojekt mit einer TextBox und ein paar Labeln und gib im KeyDown-Event alles aus, was Du im Parameter e als Properties übergeben bekommst.
    Fang an zu experimentieren und zu lernen. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!