我可以在字典中以ListControl.DisplayMember的形式显示对象的属性吗?
本文关键字:显示 对象 属性 我可以 字典 ListControl DisplayMember | 更新日期: 2023-09-27 18:07:40
目的是将列表视为'name's的列表。
这是字典:
class Scripts
{
public Dictionary<int, Script> scripts = new Dictionary<int, Script>();
...
}
下面是属性name:
class Script
{
public string name { get; set; }
...
}
问题来了:
public partial class MainForm : Form
{
Scripts allScripts;
public MainForm()
{
InitializeComponent();
allScripts = new Scripts();
setupDataSources();
}
private void setupDataSources()
{
BindingSource ketchup = new BindingSource(allScripts.scripts, null);
//THIS LINE:
listBoxScripts.DisplayMember = allScripts.scripts["Key"].name.ToString();
listBoxScripts.ValueMember = "Key";
listBoxScripts.DataSource = ketchup;
}
...
}
我就是想不出那句台词怎么写!非常感谢您的建议!
谢谢
可以在Script
类中绑定Value
并覆盖ToString
方法。
private void setupDataSources()
{
BindingSource ketchup = new BindingSource(allScripts.scripts, null);
listBoxScripts.DisplayMember = "Value";
listBoxScripts.ValueMember = "Key";
listBoxScripts.DataSource = ketchup;
}
脚本类:
class Script
{
public string name { get; set; }
public override string ToString()
{
return name;
}
}
您将'name'的实际值设置为DisplayMember,因此除非您随机将'name'中的值设置为与属性相同的文本,否则您将永远无法显示它。
你最好这样做:
listBoxScripts.DisplayMember = "name";
不是吗?
尝试将dictionary元素转换为Script对象
listBoxScripts.DisplayMember = ((Script)allScripts.scripts["Key"]).name.ToString();