這裏處理的FormClosing雲:如何使用MVP
我有一個看起來像這樣的觀點:
public interface IAddressView
{
void Close();
bool IsDirty();
bool DoesUserWantToDiscardChanges();
}
我有一個主持人,看起來像這樣:
public class AddressViewPresenter
{
private IAddressView m_addressView;
private Address m_address;
public AddressViewPresenter(IAddressView addressView)
{
m_addressView = addressView;
m_address = new Address();
}
public void CancelButtonClicked()
{
bool canClose = true;
if (m_addressView.IsDirty())
{
canClose = m_addressView.DoesUserWantToDiscardChanges();
}
if (canClose)
{
m_addressView.Close();
}
}
public void SaveButtonClicked()
{
// saving logic goes here...removed for brevity
m_addressView.Close();
}
}
然後我有一個窗體,其中有一個取消按鈕,一個保存按鈕和所有的控件來顯示地址。取消按鈕運行:
m_addressPresenter.CancelButtonClicked();
它依次檢查視圖是否髒,並提示用戶放棄任何更改。這很好,這是我想要的。
現在我的問題是如果用戶關閉表單而不點擊取消(即他們點擊右上角的「X」或者甚至點擊ALT + F4),如何實現同樣的事情。我已經嘗試過處理FormClosing事件,但是我最終複製了一些代碼,如果點擊取消按鈕,則會彈出兩次。下面是我有:
private void AddressForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.IsDirty())
{
if (!this.DoesUserWantToDiscardChanges())
{
e.Cancel = true;
}
}
}
這樣做更有意義。但是,我仍然遇到問題,當您單擊取消按鈕時,詢問您是否要放棄兩次更改。 – smoak 2009-06-08 18:56:14