1

出于我的目的,我正在 4.0 中编写一个 GUI,它以自定义颜色显示我的自定义Instance对象。ListBox我已经能够用它们各自的颜色绘制它们,但我想知道是否有办法改变这些颜色。

我已经尝试过每隔几秒钟就清除ListBox和读取Instance对象的BackGroundWorker路线,但是这条路线导致了许多令人头疼的事实,ListBox.selectedIndex即将更改并将事件发送给我的ListBox_SelectedIndexChanged事件处理程序。因此,如果可能的话,我想避免这种情况,因为尝试使用线程、锁定、竞争条件、打开和关闭事件处理程序、Invalidargumentexceptions 进行编码是一场噩梦。

我想知道,backGroundWorker 有什么方法可以直观地更新我的颜色,ListBox 而无需添加和重新添加项目来触发事件,如此DrawItem所述?

编辑:调用 ListBox.Refresh() 重新绘制列表框中的所有项目,这样做,避免了 selectedIndexChanged 事件处理程序并更新了所有项目的颜色

4

2 回答 2

1

如果您有后台工作人员报告进度,那么您可以在进度更改方法中访问列表框中的项目并重新绘制您想要的项目,具体取决于您报告的进度百分比。应该相当简单,除非你有很多物品和很多颜色。

于 2012-07-11T14:11:24.720 回答
1

更改颜色并调用ListBox.Update(),或者如果来自不同的线程,ListBox.Invoke(new MethodInvoker( ()=>ListBox.Update() ))

于 2012-07-11T14:12:31.857 回答