0

ドロップダウン ComboBox と DataGridView を配置した UserControl があります。

ComboBox は、DataGridView のデータに応じてアイテムを含むフィルターです。DataGridView のオブジェクトには、ProductType というプロパティがあります。DataGridView のすべての ProductType について、ComboBox フィルターはそれをフィルター オプションに追加します。

次のイベントが発生した場合は、DataGridView を更新する必要があります。

  • DataGridView_Load
  • ComboBox_SelectedItemChanged
  • RefreshButton_Clicked

グリッドに存在する ProductType のリストが変更された可能性があるため、データ グリッドを更新すると ComboBox が再初期化されます。

問題は、更新ボタンをクリックすると、更新機能が複数回呼び出されることです。更新ボタンをクリックすると、RefreshButton_Clicked がトリガーされます。リフレッシュにより ComboBox が再初期化されます。ComboBox を再初期化すると、選択されたアイテムが同じでなくなるため、ComboBox_SelectedItemChanged がトリガーされます。次に、更新前に選択されたアイテムを配置する必要があるため、別の ComboBox_SelectedItemChanged がトリガーされます。等。

更新中にイベントリスナーを一時停止して後で再開する方法はありますか?

4

2 に答える 2

2

a を使用して、bool _isRefreshing;現在処理中であることを示すことができます。

そのアクションを「隠す」更新ボタンは、コードの匂いのように思えます。サブスクライバーは、そのメソッドを実行する必要がある場合と実行しない場合を決定することをお勧めします。

if (!_isRefreshing)

現実には、イベント発生しているため、リスナーを無効にすると現実がわかりにくくなります...この更新ループを引き起こさない他のリスナーがある場合はどうなりますか? あなたも影響を受けているでしょう。

したがって、両方の世界が必要です。イベントは適切に発生し、リスナーは行動すべきではないと判断します。

于 2013-05-13T18:57:33.580 に答える