上下文:我的一种形式有一个 TreeView。根据对该 TreeView 的选择,我在面板中加载了一个 UserControl。一个面板是只读的,但在另一个面板中,用户可以修改/添加我保存在数据库中的数据。如果用户尝试在 TreeView 中进行新选择(事件 BeforeSelect)并且他在第二个控件(mod/add)中并且他有未保存的数据,我想问他是否要在加载新控件之前保存。问题是,当显示消息框时,事件有点失去焦点并被循环调用(大约 20 次)。此外,无论用户点击消息框(是保存还是不加载新控件)都没有影响。
所以我的问题是:无论如何要问用户他想在事件处理程序中做什么?
我希望我很清楚,抱歉英语不是我的第一语言
/编辑
这里是 BeforeSelect 和 IsCtrlFormUnsave 的代码
private void tv_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (IsCtrlFormUnsave())
{
e.Cancel = true;
//Invoke(new Action(AvertirUser)); //this is in case the save action didn't worked
}
}
private bool IsCtrlFormUnsave()
{
if (_ctrlForm != null && _ctrlForm.unsavedChange)
{
DialogResult dr = MessageBox.Show("Le formulaire présentement ouvert contient des données qui n'ont pas été sauvegardées. Voulez-vous les enregistrés avant de poursuivre?",
"Attention!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dr == DialogResult.Yes)
if (!_ctrlForm.Save())
return true;
_ctrlForm = null;
}
return false;
}
AvertirUser函数只包含一个消息框