【发布时间】:2021-10-02 11:27:43
【问题描述】:
大家好,我正在尝试重新刷列表框中的单个项目,我使用了列表框绘制项目事件,它以某种方式工作,但是当我将项目添加到我的列表框时,只添加了字符串“b”,而不是 +“hi”部分,我可以写任何我想要的或添加任何我想要的,只会打印字符串 b。
不使用绘图模式并坚持使用普通列表框显然可以解决问题,所以我猜它一定与绘图项目事件有关,但我无法弄清楚这究竟是什么,感谢任何帮助
listBox3.DrawMode = DrawMode.OwnerDrawFixed;
private async void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
foreach (string b in liIDs)
{
listBox3.Invoke((MethodInvoker)delegate
{
listBox3.Items.Add(b + "hi");
listBox3.Update();
});
}
private void listBox3_DrawItem(object sender, DrawItemEventArgs e)
{
try
{
e.DrawBackground();
Brush myBrush = Brushes.White;
myBrush = Brushes.Red;
e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
catch
{
}
}
【问题讨论】:
-
移除无用的 BackgroundWorker(和空的
catch块)。使用BeginUpdate()/EndUpdate()。可能,将 ListBox.DataSource 设置为您的数据源,而不是一一添加项目——您应该将Graphics.DrawString()替换为TextRenderer.DrawText() -
...永远不要使用空的try-catch。
标签: c# .net forms winforms listbox