| |
VB.NET - FortgeschrittenePassword TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 29.09.14 21:07 |
| Hallo,
Wie kann ich ein Password TextBox machen die die letzte Charakter nach eine Sekunde oder so in einen Stern umwandelt. Wie auf der iPhone und andere Handys.
Ich möchte auch gerne dass die TextBox eine feste Länge hat. Also wenn ein Password bspw. 5 Charaktere lang ist muss der TextBox zum Beispiel 10 Charaktere anzeigen.
Ich hoffe Ihr versteht was ich meine.
Danke im Voraus.
Henrik
0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: Manfred X | Datum: 30.09.14 06:43 |
| Vielleicht so oder ähnlich (grob getestet) ????
(Code in eine neue Klasse einfügen, das Projekt übersetzen
und das Steuerelement "TextboxPW" für die Passworteingabe verwenden.)
Imports System.Windows.Forms
Public Class TextBoxPW
Inherits TextBox
Private Const MaskChar As Char = "*"c 'maskierendes Zeichen
Private Const MaxChars As Integer = 10 'maximal zulässige Zeichenzahl
Private Const EmptyChar As Char = "_"c 'Zeichen zur Anzeige verfügbarer
' Länge
Private Const InvalidChars As String = _
" (){}[]=?^°€@" & EmptyChar & MaskChar 'unzulässige Zeichen
'Anzeigedauer für das zuletzt eingegebene Zeichen
Private Const DisplayMilliSeconds As Integer = 1000
Private _lastpresstime As Date 'Zeitpunkt der letzten Zeichen-Eingabe
Private _input As New System.Text.StringBuilder 'eingegebene Zeichenfolge
Private WithEvents timKeyMask As New Timer With _
{.Interval = 500, .Enabled = True}
Private _ismasked As Boolean = False 'Kennung für Art der Anzeige
'Benachrichtigung bei return
Public Event Done(sender As Object, e As EventArgs)
Protected Overrides Sub OnKeyPress(e As _
System.Windows.Forms.KeyPressEventArgs)
If Not Char.IsControl(e.KeyChar) And _input.Length < MaxChars Then
MyBase.OnKeyPress(e)
MaskInput(e.KeyChar, True)
End If
e.Handled = True
End Sub
Protected Overrides Sub OnKeyDown(e As System.Windows.Forms.KeyEventArgs)
MyBase.OnKeyDown(e)
'Zeichen immer hinten anhängen
Me.SelectionStart = _input.Length
If e.KeyCode = Keys.Back AndAlso _input.Length > 0 Then
'Letztes Zeichen löschen
_input.Length -= 1
MaskInput(Nothing, False)
ElseIf e.KeyCode = Keys.Return Then
'Beendigung der Eingabe melden
RaiseEvent Done(Me, EventArgs.Empty)
End If
e.Handled = True
End Sub
Private Sub timKeyMask_Tick(sender As Object, e As System.EventArgs) _
Handles timKeyMask.Tick
Dim period As Long = Now.Ticks - _lastpresstime.Ticks
If period > TimeSpan.TicksPerMillisecond * DisplayMilliSeconds And _
Not _ismasked Then MaskInput(Nothing, False)
End Sub
Private Sub MaskInput(ByVal newchar As Char, ByVal shownewchar As Boolean)
If InvalidChars.Contains(newchar) Then Exit Sub 'unzulässiges Zeichen
MyBase.Text = New String(MaskChar, _input.Length) 'Maske: vorhandene
' Zeichen
If Not newchar = Nothing Then
_input.Append(newchar)
If shownewchar Then
MyBase.AppendText(newchar)
_lastpresstime = Now
Else
MyBase.AppendText(MaskChar)
End If
End If
If _input.Length < MaxChars Then
'Maske: noch verfügbare Zeichen
MyBase.AppendText(New String(EmptyChar, MaxChars - _input.Length))
End If
MyBase.SelectionStart = _input.Length
_ismasked = Not shownewchar
End Sub
''' <summary>Abfrage der eingegebenen Zeichenfolge</summary>
Public Shadows ReadOnly Property Text As String
Get
Return _input.ToString
End Get
End Property
End Class | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 30.09.14 10:58 |
| Hallo Manfred X,
Danke für deine gute und schnelle Antwort.
Beim Start erhalte ich eine Fehler Meldung: Property 'Text' is 'ReadOnly'.
Wenn ich ReadOnly in Public Shadows ReadOnly Property Text As String entfernt und Set bspw. End Set einsetze funktioniert es prima.
Vielleicht habe ich mich falsch ausgedrückt.
„Ich möchte auch gerne dass die TextBox eine feste Länge hat. Also wenn ein Password bspw. 5 Charaktere lang ist muss der TextBox zum Beispiel 10 Charaktere anzeigen.“
Was ich meine ist das wenn man ein Password von 5 Charakteren eintippt möchte ich dass wenn die TextBox den Fokus verliert zum Beispiel 10 Charaktere anzeigt damit man das Password nicht erraten kann.
Gruß,
Henrik
0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: Manfred X | Datum: 30.09.14 11:57 |
| Einfach zusätzlich die Fokus-Ereignisse des Control überschreiben:
Protected Overrides Sub OnLostFocus(e As System.EventArgs)
MyBase.OnLostFocus(e)
MyBase.Text = New String(MaskChar, MaxChars)
End Sub
Protected Overrides Sub OnGotFocus(e As System.EventArgs)
MyBase.OnGotFocus(e)
MaskInput(Nothing, False)
End Sub (Eventuell zusätzlich noch bei Betätigung der Returntaste
die Eingabe überschreiben - wie bei OnLostFocus.)
Eine zusätzliche Clear-Methode könnte eingebaut werden!
Sobald im Done-Ereignis das Passwort als korrekt erkannt worden
ist, kann man mit dem Clear die Zeichenfolge im _input-Member löschen.
Des weiteren könnte man auch nach 30 Sekunden Inaktivität des
Users während der Passwort-Eingabe im Tick-Event die bereits
vorliegenden Zeichen wieder löschen.
Der Fehler wegen der Shadows-Text-Eigenschaft tritt bei Verwendung
des Control im Designer auf. (Dort soll bei der Initialisierung der Form
ein Initial-Wert auf diese Eigenschaft zugewiesen werden.)
Beitrag wurde zuletzt am 30.09.14 um 12:20:17 editiert. | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 30.09.14 12:25 |
| Nochmal vielen Dank. Dass funktioniert SUPER! 0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 30.09.14 15:11 |
| Hallo Manfred X,
Es tut mir leid dich noch mal belästigen zu müssen.
Ich habe ein Problem wenn ich dein TextBoxPW von einer Datei ausfülle.
Ich habe verschiedenes versucht ohne glück.
Könntest du mir hier kurz eine Lösung geben. Danke.
Gruß,
Henrik 0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: Manfred X | Datum: 30.09.14 15:54 |
| Ich verstehe nicht, was Du mit "Ausfüllen von einer Datei" meinst.
Das Control dient der Eingabe des Passworts durch den Benutzer.
(Im Done-Event wird geprüft, ob das eingegebene Passwort korrekt ist.)
Hier eine ergänzende Methode, der man eine Zeichenfolge
übergeben kann, die sukzessive zeichenweise ins Control eingetragen wird.
Danach wird das Done-Ereignis ausgelöst.
Public Sub SetPassword(ByVal pw_test As String)
For i As Integer = 0 To pw_test.Length - 1
MaskInput(pw_test(i), True)
Threading.Thread.Sleep(500)
Next i
RaiseEvent Done(Me, EventArgs.Empty)
End Sub | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 30.09.14 16:13 |
| Was ich meine ist das ich mein Password in einer verschlüsselten Datei gespeichert. Wenn ich dann die Datei ladet soll der TextBoxPW ausgefüllt werden.
0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: Manfred X | Datum: 30.09.14 18:16 |
| Ein Eingabedialog für das Passwort sollte etwa so aussehen ....
Public Class frmPasswort
Dim lblPass As New Label With _
{.Parent = Me, .Text = "Passwort: ", .Top = 40, .Width = 100}
Dim WithEvents txtPass As New TextBoxPW With _
{.Parent = Me, .Top = 40, .Width = 200, .Left = 105}
Dim lblInfo As New Label With _
{.Parent = Me, .Top = 80, .Width = 300}
Private Sub frmPasswort_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.Size = New Size(320, 300)
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog
End Sub
Private Sub txtPass_Done(sender As Object, e As System.EventArgs) Handles _
txtPass.Done
Static counter As Integer = 0
Dim userinput As String = txtPass.Text
Dim password As String = ""
Using sr As New IO.StreamReader("Pfad der PasswortDatei")
password = sr.ReadLine()
End Using
'Passwort entschlüsseln
Dim password_encrypted As String = password '???
If password_encrypted = userinput Then
Me.DialogResult = Windows.Forms.DialogResult.OK
Me.Close()
ElseIf counter < 3 Then
counter += 1
lblInfo.Text = "Das Passwort ist falsch"
Else
Me.DialogResult = Windows.Forms.DialogResult.Cancel
Me.Close()
End If
End Sub
End Class | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 02.10.14 10:04 |
| Hallo Manfred,
Danke für deinen Eintrag Public Class frmPasswort
Ich habe ein Problem mit clearen der TextBox.
Wie kann ich alle Zeichen der TextBox löschen?
0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: Manfred X | Datum: 02.10.14 12:54 |
| ''' <summary>Löschen der Eingabe</summary>
Public Shadows Sub Clear()
MyBase.Text = String.Empty 'Anzeige löschen
_input.Clear() 'gespeicherte Zeichenfolge löschen
MaskInput(Nothing, False) 'Anzeige einrichten
End Sub | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 02.10.14 13:00 |
| Vielen dank 0 | |
Re: Password TextBox wie auf dem Handy | | | Autor: henrikl2000 | Datum: 12.04.15 10:58 |
| Hallo Manfred,
Danke noch mal.
Deine Lösung funktioniert gut.
0 | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevEingabe 3.0
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|