首页 > 解决方案 > Winforms Listbox,尽管Drawmode被OwnerDrawFixed,如何使显示成员工作?

问题描述

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

lbx_robots.DrawMode = DrawMode.OwnerDrawFixed;

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

大多数问题代码所在的类:

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);
    }

这是我运行它后出现在我的列表框中的内容: 我的列表框的屏幕截图,显示成员不工作

标签: c#winformslistboxbindinglist

解决方案


编辑:我刚刚解决了:在网站的代码中有一行说

.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);

有效。


推荐阅读