vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Password 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Password TextBox wie auf dem Handy 
Autor: henrikl2000
Datum: 30.09.14 12:25

Nochmal vielen Dank. Dass funktioniert SUPER!
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Password TextBox wie auf dem Handy 
Autor: henrikl2000
Datum: 02.10.14 13:00

Vielen dank
0
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel