1

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

4

4 回答 4

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);
}
于 2009-10-22T08:03:33.497 回答
3

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

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

listView.Items.Add(lvi);
于 2009-10-21T21:41:16.397 回答
0

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

我不完全记得 ListView 和 ListViewItem 的整个结构,或者它是什么......但你可能需要做很多覆盖和隐藏,至少继承 ListView,也许还有 ListViewItem。

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

于 2009-10-21T21:22:50.500 回答
0

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

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

于 2009-10-21T21:56:16.087 回答