2012-07-11 56 views
1

爲我的目的我正在寫一個GUI在4.0中顯示我自定義Instance對象ListBox與自定義顏色。我已經能夠繪製它們各自的顏色,但我想知道是否有辦法改變這些顏色。更新C#中的列表框顏色#

我已經嘗試就下清除ListBox並在單獨BackGroundWorker每隔幾秒鐘readding的Instance對象的路線,但是這條路線導致了這樣一個事實令人頭痛的是,ListBox.selectedIndex將發生變化,拍客的事件給我的ListBox_SelectedIndexChanged事件處理程序。因此,如果可能的話,我想避免這種情況,因爲嘗試通過線程,鎖定,raceconditions,打開和關閉事件處理程序,Invalidargumentexceptions進行編碼是一場噩夢。

我想知道,有沒有辦法爲一個BackgroundWorker在視覺上更新我的ListBox的顏色,而無需添加和重新添加項目描述here觸發DrawItem事件?

編輯: 調用ListBox.Refresh()重新繪製ListBox中的所有項目,而這樣做,避免了SelectedIndexChanged事件處理程序,並更新了所有項目的顏色

回答

1

改變顏色,並呼籲ListBox.Update(),或者從不同的線程,ListBox.Invoke(new MethodInvoker(()=>ListBox.Update()))

+0

謝謝!像魅力一樣工作 – 2012-07-11 14:31:23

1

如果您有後臺工作進展情況的報告,那麼你可以在進度改變的方法中,訪問列表框中的項目並根據你報告的進度百分比重畫一個你想要的項目。應該相當簡單,除非你有很多物品和很多顏色。