以下のコードを見てください。Listview ItemSelectionChanged イベントが 2 回発生するため、UserClosedSession ダイアログが 2 回表示されます。2番目のダイアログを抑制する方法はありますか?
基本的に、ユーザーがリストビューの項目をクリックしたときに、いくつかの検証を行おうとしています。選択したアイテムを変更すると、質問が表示されます。「はい」の場合は新しいアイテムを選択し、「いいえ」の場合は選択を「元に戻します」。以下のコードは、実際の問題の単純なサンプルです。UserClosedSession の内容は無視してください。ここでは、発生する必要があることを模倣するために使用されています。
私はあらゆる種類を試しました。マウスクリック/マウスダウンイベントを試しました。しかし、ユーザーがキーボードで選択を変更する場合、これらは役に立ちません。私はまた、配線を外してから、ItemSelectionChangedeventを自分自身から再配線しようとしました(コメントアウトされたコードを参照)-機能しません。
private void lv_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
{
Debug.WriteLine("Index: " + lv.SelectedIndices[0].ToString());
if (lv.Tag != null)
{
if ((int)lv.Tag != lv.SelectedIndices[0])
{
if (!UserClosedSession())
{
//lv.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(lv_ItemSelectionChanged);
//lv.ItemSelectionChanged -= lv_ItemSelectionChanged;
lv.Items[(int)lv.Tag].Selected = true;
//lv.ItemSelectionChanged +=new ListViewItemSelectionChangedEventHandler(lv_ItemSelectionChanged);
return;
}
}
}
else
lv.Tag = lv.SelectedIndices[0];
}
}
private bool UserClosedSession()
{
return
(MessageBox.Show("Close Session?", "", MessageBoxButtons.YesNo) == DialogResult.Yes);
}