如果您查看下面的代码。Listview ItemSelectionChanged事件会触发两次,因此我会得到两次UserClosedSession对话框。有没有办法抑制第二个对话框?
基本上,我正在尝试在用户单击ListView中的项目时进行一些验证。更改所选项目时,会询问一个问题,如果是,则继续选择新项目,如果不是,则“撤消”所选项。下面的代码只是真实世界问题的简单示例。忽略UserClosedSession的内容,它只是在这里用于模拟需要发生的情况。
我已经尝试了各种方法。尝试了鼠标单击/鼠标按下事件。但是如果用户使用键盘更改选择,则无法使用这些选项。我还尝试了从自身中解除和重新连接ItemSelectionChangedevent(请参见注释代码)-不起作用。
基本上,我正在尝试在用户单击ListView中的项目时进行一些验证。更改所选项目时,会询问一个问题,如果是,则继续选择新项目,如果不是,则“撤消”所选项。下面的代码只是真实世界问题的简单示例。忽略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);
}