2012-05-30 30 views
2

隨着表單/對話框底部的「OK」和「Cancel」按鈕的出現,我覺得很奇怪,我似乎找不到一種「標準」方式來保存控件州。有狀態的Winform和取消按鈕

例如,我有一個過濾器的檢查列表框。當用戶單擊確定按鈕時,它將過濾器應用於數據集並關閉表單。如果用戶單擊取消按鈕,表單將撤消所有已檢查的項目更改並關閉表單。

在完美的世界中,當用戶單擊「確定」按鈕時,保存的控制狀態將被當前控制狀態覆蓋,並設置新狀態標誌。當窗體關閉時,如果設置了新狀態標誌,窗體將重置標誌,並且如果未設置該窗體,則窗體用保存的控制狀態替換顯示的控件。這樣,如果取消按鈕被擊中,用戶所做的所有檢查更改都將被重置。

處理取消按鈕撤消對控件或甚至整個表單的更改的最佳實踐方式是什麼?有最佳實踐解決方案嗎?我可以看到這對於文本框,徑向按鈕,複選框以及幾乎所有的控件都是必需的,所以請嘗試保留它的通用性,而不是特定於已選中的列表框。

+0

這是一個有趣的問題,但根據我的經驗,我無法意識到您可以「保存」完整表單的狀態,以便在用戶取消操作時重新加載它。通常,當一個人取消時,我們放棄更改而不應用過濾器。或者,如果有幾個控件只是使用變量來跟蹤每個控件的舊值。 –

+0

這個問題可能是一個更適合在姐姐網站[Programmers.SE],你想我遷移它嗎? – Kev

回答

5

我會建議它的那樣簡單:

  • 保持數據反映在UI基於在用戶界面本身
  • 當加載的形式,設置它的內容分開數據
  • 當用戶單擊確定時,將更改保存到數據模型(但是,這將取決於您是如何填充模型的)
  • 當用戶單擊取消時,不會保存所有更改

沒有必要「取消」取消上的更改 - 只需丟棄表單即可。當您下一次要顯示錶單時,將會像以前一樣加載相同的數據,因爲您沒有保存對其的任何更改。

0

簡單的方法:不要重複使用表單實例。之前做var childForm = new MyChildForm();每個childForm.Show();