1

私の目的のために、カスタムInstanceオブジェクトListBoxをカスタム カラーで表示する GUI を 4.0 で作成しています。それぞれの色で描画できましたが、これらの色を変更する方法があるかどうか疑問に思っています。

数秒ごとにオブジェクトのクリアListBoxと再読み込みを別々に試みましたが、このルートでは、が変更されてイベントがイベント ハンドラーに送信されるという事実により、多くの頭痛の種になりました。したがって、スレッド化、ロック、競合状態、イベント ハンドラーのオンとオフの切り替え、Invalidargumentexceptions を使用してコードを作成しようとするのは悪夢であるため、可能であればそれを避けたいと思います。InstanceBackGroundWorkerListBox.selectedIndexListBox_SelectedIndexChanged

here で説明されているように、イベントをトリガーListBox するためにアイテムを追加および再追加する必要なく、 backGroundWorker が私の色を視覚的に更新する方法はありますか?DrawItem

編集: ListBox.Refresh() を呼び出すと、リストボックス内のすべてのアイテムが再描画され、selectedIndexChanged イベント ハンドラーが回避され、すべてのアイテムの色が更新されました。

4

2 に答える 2

1

バックグラウンド ワーカーが進行状況を報告している場合は、progress changed メソッドで、リスト ボックス内の項目にアクセスし、報告した進行状況のパーセンテージに応じて、必要な項目を再描画できます。たくさんのアイテムとたくさんの色を持っていない限り、かなりシンプルにする必要があります.

于 2012-07-11T14:11:24.720 に答える
1

色を変更して を呼び出すListBox.Update()か、別のスレッドからの場合は、ListBox.Invoke(new MethodInvoker( ()=>ListBox.Update() ))

于 2012-07-11T14:12:31.857 に答える