C# - 将ListView列中的文本转换为密码字符

时间:2009-10-21 20:58:13

标签: c# listview passwords transform

有没有办法将listview控件的特定列中的文本转换为密码字符?谢谢。

4 个答案:

答案 0 :(得分:4)

使用ObjectListView(围绕.NET WinForms ListView的开源包装器)。它使得几乎所有关于ListView的东西都不那么痛苦 - 有时甚至是有趣的。

在这种情况下,您将使用AspectToStringConverter委托,该委托负责将值转换为您希望在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);
}

答案 1 :(得分:3)

我会将实际数据(在这种情况下为密码)存储在ListViewItem的Tag属性中。然后你可以在文本字段中放置任何你喜欢的内容。此模式通常适用于将对象与其他类型的列表/网格控件中的项相关联。

String password = "MyPassword";
ListViewItem lvi = new ListViewItem("********");
lvi.Tag = password;

listView.Items.Add(lvi);

答案 2 :(得分:0)

Windows不支持它,但是你所称的那些“密码字符”实际上是一个unicode char,所以你可以为它构建自己的系统。 像继承ListView,然后在私有字段中保存真实文本,并用这些点替换单元格的文本。

我并不完全记得ListView和ListViewItem的整个结构,或者它是什么......但是你可能需要做很多重写和隐藏,至少包含ListView,也许ListViewItem为好。

我想你会自己做到这一点。如果没有,请编辑您的问题:)

答案 3 :(得分:0)

如果它是输出字段,则在填充字段时只需将更改设置为“*”。如果是用户正在输入的那个,则需要附加到keydown事件并在那里进行替换。

您需要至少识别一个其他字段(用户名,用户ID,等等......)作为地图,以便您知道字段中的实际值是什么,如果您想要使用实际值密码。你可以使用Hashtable对象来做到这一点。