J'utilise un contrôle personnalisé transparent basé sur RichTextBox. Est-il possible d'avoir un support de char de mot de passe comme dans le contrôle TextBox normal.Mot de passe char pour RichTextBox
Répondre
C'est simple, RTB implémente la prise en charge de la saisie de mot de passe. Il n'est tout simplement pas exposé dans l'encapsuleur .NET. Ajoutez une nouvelle classe à votre projet et collez le code ci-dessous. Compiler. Déposez le nouveau contrôle du haut de la boîte à outils sur votre formulaire.
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;
}
}
}
Oui, il y a un moyen. Vous devez intercepter les touches avant de les dessiner (recherchez PreviewKeyDown ou des événements similaires) et remplacez-les par des astérisques (*). Mais vous devez également implémenter une logique pour gérer la chaîne de caractères réels.
Remarque Je suis d'accord avec le commentaire de Cody Gray.
Il est également intéressant de noter que la norme Le contrôle Win32 'TextBox' fait un * lot * de plus lorsqu'il est configuré pour stocker les mots de passe plutôt que d'afficher simplement des caractères sous forme d'astérisques/de puces. Par exemple, cela désactive également la copie d'un mot de passe hors de la zone de texte. Vous êtes sur le point de commencer à faire rouler une pierre en essayant de faire tout cela vous-même, même si vos exigences en matière de sécurité sont «limitées». –
@Cody - google "révélateur de mot de passe". –
@Hans: J'ai des choses indicibles dans mon sac de trucs. La plupart des choses sont craquables au * niveau * si vous êtes prêt à essayer assez dur. Je dis juste, il est beaucoup plus probable que l'utilisateur moyen pense à copier et coller un mot de passe d'une zone de texte que d'avoir un révélateur de mot de passe. Le demandeur a mentionné que les problèmes de sécurité sont «limités», donc je pense que cela laisse de côté ceux qui ont recours à ce type de logiciel, mais pas ceux qui connaissent le raccourci clavier Ctrl + C. –
Cela a fonctionné pour moi et a résolu le but.
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
* Pourquoi * voudriez-vous entrer un mot de passe dans un 'RichTextBox'? Il semble que vous utilisiez le mauvais contrôle pour le travail. Il n'est explicitement pas * conçu * pour entrer des mots de passe, et pourrait présenter un risque de sécurité. –
Cela faisait partie des exigences de conception de l'interface utilisateur pour que l'application dispose d'un contrôle d'édition de texte avec un arrière-plan dégradé. La sécurité n'est pas un problème, cette application a des exigences de sécurité très limitées. – user976535
S'agit-il d'une application WinForms ou WPF? Chaque fois que vous dites que "les exigences de conception d'interface utilisateur" l'emportent sur tout type de fonctionnalité réelle, qui crie juste pour l'application à écrire dans WPF ... –