上下文:我的窗體中有一個TreeView。根據該TreeView的選擇,我在一個面板中加載一個UserControl。一個pannel是隻讀的,但在另一個pannel中,用戶可以修改/添加我保存在數據庫中的數據。如果用戶試圖在TreeView中做出新的選擇(事件BeforeSelect)並且他在第二個控件(mod/add)中,並且他有未保存的數據,我想問他在加載新控件之前是否要保存。問題是,當顯示消息框時,事件有點失去焦點,並在循環中調用(大約20次)。另外,不管用戶點擊消息框(是保存還是不加載新控件),都不會產生影響。如何在事件處理程序中使用消息框
所以我的問題是:無論如何要問用戶他想在事件處理程序中做什麼?
我希望我是清楚的足夠多,遺憾的英語不是我的第一langage
/編輯
這裏從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只containt一個消息框
你可以張貼一些示例代碼,以幫助我們理解你在說什麼? –
@JesseCarter你去了 –
也許你需要考慮尋找不同的事件來獲得你想要的效果。在甚至允許選擇新的TreeViewItem之前,可能會在_ctrlForm中插入LoseFocus –