我有一個窗體,在其他控件中,有一個TextBox字段,可以由用戶選擇填充。
還有一個btn提交按鈕執行所需的操作並關閉窗體。
在其代碼中,我檢查是否存在評論,如果不是這樣,請詢問用戶是否在退出之前填寫它。
我使用bool AskToFillCommentIfNeeded()函數顯示一個MessageBox,要求用戶在退出之前可選地填充註釋,如果這尚未完成。
如果用戶回答是,則返回true,否則返回false。
如果用戶點擊是,我必須退出提交功能而不關閉表單,所以用戶可以輸入評論,然後再次按提交按鈕。如何在表單爲模態時退出函數而不退出表單?
的[編輯]代碼是這樣的:
private void btnSubmit_Click(object sender, EventArgs e)
{
// ask user if he wants to fill the comment : if so, exit this function
if (AskToFillCommentIfNeeded()) { return; };
// ... save data and exit form ...
}
我使用此代碼在非模態形式,它按預期工作。
但是當我嘗試在一個模式形式btnSubmit按鈕DialogResult屬性設置爲OK使用它,它 不能按預期工作:
而不只是退出事件接收器,它會關閉形式 不保存數據。
我編了一個(笨拙)的解決方法,使用這樣的布爾標誌:
private bool isBusy = false;
private void btnSubmit_Click(object sender, EventArgs e)
{
// clumsy attempt to avoid form exit :
isBusy = true;
// ask user if he wants to fill the comment : if so, exit this function
if (AskToFillCommentIfNeeded()) { return; };
isBusy = false;
// ... save data and exit form ...
}
因此,如果執行return語句,我攔截_FormClosing事件 並取消它,如果設置了標誌爲true:
private void FDialog_FormClosing(object sender, FormClosingEventArgs e)
{
// abort closing if flag is set
e.Cancel = isBusy;
}
這樣的工作,但它不盡人意。
有沒有更好的方法來實現相同的行爲?
我正在使用C#Express 2010。
預先感謝您。
傑克·格里芬
感謝您的及時答覆。 – 2012-04-28 11:15:16
糟糕!錯誤的評論! – 2012-04-28 12:10:45
您可以刪除評論。而且你不必感謝每一張海報。 – 2012-04-28 12:36:42