2011-11-22 61 views
0

我試圖檢查在窗體用戶窗體中所有需要的信息是否在執行完代碼之前完成。檢查Windows窗體完成

是否有任何建議檢查窗體窗體是否已完成的方法?

看來,如果我列出每個控件,然後檢查它,我的代碼看起來臃腫,因爲它繼續爲約40控件。

例如

if(!check_1(varX_TextBox)) 
    return false; 

if(!check_2(varY_ComboBox)) 
    return false; 

... 

if(!check_40(varAA_numericUpDown)) 
    return false; 
+0

你是什麼意思的「我想檢查一個Windows用戶表單中的所有需要​​的信息是否完整」。你在說什麼?你是否在談論表單中所有控件的加載?請解釋! –

+0

大多數表格都是靜態的,所以默認會加載。我需要知道它們是否包含TextBox或ComboBox的文本(例如TexBox.Text!=「」),如果它是一個TickBox等已被檢查。 –

回答

2

有許多不同的方式來實現這一點,它最終會歸結爲您自己的個人喜好,你使用。也就是說,以Windows Forms開始的兩個好地方是屬於Windows Forms框架(請參閱here)和企業庫Validation Application Block的驗證事件。

驗證事件ValidatingValidated爲您提供掛鉤以乾淨地插入您的控件驗證,並且大多數Windows窗體控件都完全與此框架集成。您可以在各種時間觸發此驗證(例如表單關閉或控件失去焦點時)。

如果您在設計中使用域模型,則驗證應用程序塊非常有用。它允許您用驗證要求修飾類的屬性,然後提供幫助驗證這些類和報告任何錯誤的類。

+0

完美,謝謝 –

0

您可以用Win-表單驗證控件,或者執行一些其他驗證機制,例如在您的視圖模型(主持人)實現IDataErrorInfo的。

2

正如建議的其他解決方案,你可以去與他們或者你可以使你的自定義功能作爲您的要求。

讓我舉個例子。
假設表單中包含15個以上的文本框,其中10個是必需的。因此,在中設置一條消息文本框的標記屬性就像「需要xyz字段」

現在就提交表單,你可以調用像下面

foreach (Control c in this.Controls) 
    { 
     //All text boxes validate in one if statement 
     if (c is TextBox && c.Tag.ToString() != string.Empty) 
     { 
      MessageBox.Show(c.Tag.ToString()); 
     } 
    } 

這是可以覆蓋所有像組合框,複選框等其他類型的控件..
現在對你如何使用驗證只是例子。但你也可以這樣做,

0
  1. 一種方法是創建一個驗證類,它包含所有需要檢查的屬性。當用戶更改文本框或複選框等時更改該類的屬性,然後在類中查找更改。您需要兩種狀態,即有效狀態和已更改狀態,並始終將已更改狀態與有效狀態進行比較。如果兩種狀態都相同,則意味着表單上的所有驗證和檢查都符合您的要求。
0

圍繞你想要做的事情沒有其他'魔術'的方法。每個領域,如果有其要求,將有它的代碼片段,該領域的驗證。

你就可以選擇從是關於如何「添加」選項什麼是驗證剪斷到外地:

每個控制
  • 定時器
    • OnValidate事件,將檢查所有的在窗體上的控件,每個都有自己的片段
    • OnChange事件每個控制
    • OnOK事件表單上的「接受」按鈕,即會在每個控制和驗證它

    我最喜歡的是以上都不是,因爲我非常注重綁定,所以我有一個我的數據類,將該類綁定到窗體控件,並在'接受'按鈕上讓我的類數據驗證。