1

MultiSelectがオンになっているDataGridViewがあります。SelectionChangedイベントが発生したときに、どのアイテムが新しく選択され、どのアイテムが新しく選択解除されたかを知りたいのですが。たとえば、(Ctrlキーを押しながらクリックして)複数のアイテムを選択した後、Ctrlキーを離して単一のアイテムを選択した場合、どのアイテムが選択解除されたかを知りたいです。以前に選択したアイテムのコレクションを追跡することはできましたが、あまり考えすぎないようにしたかっただけです。

4

3 に答える 3

1

その情報は、イベント引数に含める必要があります。

イベントを使用しRowStateChangedます。クリックされたDataGridViewRowStateChangedEventArgs行が含まれます。ユーザーが複数の行を選択/選択解除すると、選択/選択解除された行ごとにイベントが1回呼び出されます。

e.Row.Selected行が現在選択されているか選択解除されているかがわかります。

于 2009-12-04T20:01:13.993 に答える
1

イベントは、どのことが変更されたかを正確に教えてくれません。何らかの理由で知る必要がある場合は、前の選択を追跡する必要があります。

このイベントに対応して何をしようとしていますか?あなたの本当の目標を達成するためのはるかに簡単な方法があるかもしれません。

于 2009-12-04T20:01:59.423 に答える
0

この情報は、本質的には利用できませんDataGridViewDataGridViewただし、この情報を提供 するラッパーを作成することはできます。

public static void OnSelectionChanged(
  this DataGridView view,
  Action<List<DataGridViewRow>,List<DataGridViewRow>> handler) {
  var oldSelection = view.SelecetedRows.Cast<DataGridViewRow>.ToList();
  view.SelectedChanged += (sender,e)  {
    var newSelection = view.SelectedRows.Cast<DataGridViewRow>.ToList();
    handler(oldSelection,newSelection);
    oldSelection = newSelection;
  };
}

使用事例

void HandleSelectionChanged(List<DataGridViewRow> oldRows, List<DataGridViewRow> newRows) {
  ..
}

void FormLoaded() {
  myDataGridView.OnSelectionChanged(HandleSelectionChanged);
}
于 2009-12-04T20:18:50.650 に答える