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);
成功了。
我一直在尝试在我的列表框中添加不同颜色的项目,但偶然发现了 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);
成功了。