2010-12-15 10 views
1

Ich verwende transparentes benutzerdefiniertes Steuerelement basierend auf RichTextBox. Gibt es eine Möglichkeit, Kennwort-Unterstützung wie im regulären TextBox-Steuerelement zu haben.Kennwortzeichen für RichTextBox

+4

* Warum * möchten Sie ein Passwort in einer 'RichTextBox' eingeben? Es klingt, als ob Sie die falsche Steuerung für den Job verwenden. Es ist explizit * nicht für die Eingabe von Passwörtern * ausgelegt und könnte ein Sicherheitsrisiko darstellen. –

+0

Das war ein Teil der Anforderungen an die Benutzeroberflächengestaltung für die Anwendung, um eine Textbearbeitungssteuerung mit Gradientenhintergrund zu haben. Sicherheit ist kein Problem, diese Anwendung hat sehr begrenzte Sicherheitsanforderungen. – user976535

+1

Ist dies eine WinForms- oder WPF-Anwendung? Jedes Mal, wenn Sie sagen, dass "User Interface Design-Anforderungen" jede Art von tatsächlichen Funktionalität trump, schreit nur für die App in WPF geschrieben werden ... –

Antwort

5

Es ist einfach zu tun, RTB implementiert tatsächlich Unterstützung für die Passworteingabe. Es ist nur nicht im .NET-Wrapper verfügbar. Fügen Sie Ihrem Projekt eine neue Klasse hinzu und fügen Sie den unten gezeigten Code ein. Kompilieren. Legen Sie das neue Steuerelement oben in der Toolbox auf Ihrem Formular ab.

using System; 
using System.Windows.Forms; 

class RichPassword : RichTextBox { 
    protected override CreateParams CreateParams { 
     get { 
      // Turn on ES_PASSWORD 
      var cp = base.CreateParams; 
      cp.Style |= 0x20; 
      return cp; 
     } 
    } 
} 
0

Ja, es gibt einen Weg. Sie müssten Tastenbetätigungen abfangen, bevor sie gezeichnet werden (suchen Sie nach PreviewKeyDown oder ähnlichen Ereignissen) und ändern Sie sie in Sternchen (*). Sie müssen jedoch auch Logik implementieren, um die Zeichenfolge für echte Zeichen zu verwalten.

Hinweis Ich stimme dem Kommentar von Cody Gray zu.

+1

Es ist auch erwähnenswert, dass der Standard Das Win32 'TextBox'-Steuerelement führt ein * Lot * mehr aus, wenn es zum Speichern von Kennwörtern eingerichtet ist, anstatt nur Zeichen als Sternchen/Aufzählungszeichen anzuzeigen. Beispielsweise wird auch das Kopieren eines Kennworts aus dem Textfeld deaktiviert. Sie sind dabei, einen Felsen auf einen Hügel zu rollen, indem Sie versuchen, all dies selbst zu tun, auch wenn Ihre Sicherheitsanforderungen "begrenzt" sind. –

+0

@Cody - Google "Passwort-Revealer". –

+0

@Hans: Ich habe unaussprechliche Dinge in meiner Trickkiste. Die meisten Dinge sind crackable auf * einige * Ebene, wenn Sie bereit sind, hart genug zu versuchen. Ich sage nur, es ist viel wahrscheinlicher, dass der durchschnittliche Benutzer denkt, ein Passwort aus einer Textbox zu kopieren und einzufügen, als einen Passwort-Revealer zu haben. Der Fragesteller erwähnt, dass Sicherheitsbedenken "begrenzt" sind, so dass ich denke, dass diejenigen, die auf diese Art von Software zurückgreifen, nicht diejenigen auslassen, die die Tastenkombination Strg + C kennen. –

-1

Dies hat für mich funktioniert und den Zweck gelöst.

Public Class RichPassword 
    Inherits RichTextBox 
    Private Const ES_PASSWORD = 32 
    Protected Overrides ReadOnly Property CreateParams As CreateParams 
     Get 
      Dim CP = MyBase.CreateParams 
      CP.Style = CP.Style Or 32 
      Return CP 
     End Get 
    End Property 
End Class