Winforms Listbox,尽管 Drawmode 是 OwnerDrawFixed,如何使 displaymember 工作?

Winforms Listbox, how to make a displaymember work despite the Drawmode being OwnerDrawFixed?

我一直在尝试在我的列表框中添加不同颜色的项目,但偶然发现了 this Link。我尝试将其实施到我的项目中。但现在我遇到了一个大问题:列表框的数据源是一个绑定列表,并且有一个工作的 Displaymember 和所有东西,但是在插入这个之后(这是颜色更改工作所必需的):

lbx_robots.DrawMode = DrawMode.OwnerDrawFixed;

显示成员似乎被忽略了,我没有看到项目的名称,而是看到了 Robogotchi.Robot,这与我根本没有显示成员时一样。

其中class大部分问题代码所在:

public Robogotchi()
    {
        InitializeComponent();

        //test BEGIN; DELETE LATER
        Robot robot = new Robot();
        robot.State = Robot.stateofrobot.Einwandfrei;
        robot.Name = "test";
        int abc = Convert.ToInt32(robot.State);
        robotlist.Add(robot);
        lbx_robots.DataSource = robotlist;
        lbx_robots.DisplayMember = "Name";
        lbx_robots.Refresh();


        //test END; DELETE LATER

        //stuff to change the color of listbox items
        //lbx_robots.BackColor = Color.Beige;
        lbx_robots.DrawMode = DrawMode.OwnerDrawFixed;
        lbx_robots.DrawItem += new DrawItemEventHandler(listBox1_SetColor);
    }

这是我 运行 后出现在我的列表框中的内容: Screenshot of my Listbox with displaymember not working

编辑:我刚刚解决了它: 在该站点的代码中,有一行内容为

.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
            e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);

当我将其更改为:

e.Graphics.DrawString((((ListBox)sender).Items[e.Index] as Robot).Name,
            e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);

成功了。