我可以在字典中以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;
    }
    ...
}

我就是想不出那句台词怎么写!非常感谢您的建议!

谢谢

我可以在字典中以ListControl.DisplayMember的形式显示对象的属性吗?

可以在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();