2009-10-21 5 views

Répondre

3

Je stockerais les données réelles (mot de passe dans ce cas) dans la propriété Tag de ListViewItem. Ensuite, vous pouvez mettre ce que vous voulez dans le champ Texte. Ce modèle fonctionne bien en général pour associer des objets avec des éléments d'autres types de contrôles liste/grille.

0

Windows ne le supporte pas, mais ces "mots de passe" comme vous l'appelez, sont en fait un caractère Unicode, donc vous pouvez construire votre propre système pour cela. Quelque chose comme hériter ListView, puis conserver dans un champ privé le texte réel, et remplacer le texte de la cellule avec ces points. Je ne me souviens pas exactement de la structure complète de ListView et de ListViewItem, ou quoi que ce soit ... mais vous devrez probablement faire beaucoup de redéfinition et de dissimulation, héritant au moins de ListView, et peut-être ListViewItem ainsi que.

Je pense que vous réussirez à le faire vous-même. Sinon, éditez votre question :)

+1

Je déteste listviews haha, si confus après un certain temps. Avez-vous une chance de me donner un début? – user

0

S'il s'agit d'un champ de sortie, il vous suffit de faire le '*' lorsque vous remplissez le champ. Si c'est un utilisateur que vous entrez, vous devez vous connecter à l'événement keydown et y effectuer la substitution. Vous devrez identifier au moins un autre champ (Nom d'utilisateur, ID utilisateur, etc.) pour agir comme une carte afin que vous sachiez quelle est la valeur réelle dans le champ, si vous voulez utiliser le mot de passe réel. Vous pouvez le faire avec un objet Hashtable.

4

Utilisez un ObjectListView (un wrapper open source autour de .NET WinForms ListView). Cela rend presque tout ce qui concerne un ListView beaucoup moins douloureux - c'est même amusant parfois.

Dans ce cas, vous devez utiliser un délégué AspectToStringConverter, qui est responsable de la conversion d'une valeur dans la chaîne que vous souhaitez apparaître dans la ListView:

this.olv1.passwordColumn.AspectToStringConverter = delegate(object value) { 
    string password = (string)value; 
    if (String.IsNullOrEmpty(password)) 
     return String.Empty; 
    else 
     return new String('*', password.Length); 
} 
Questions connexes