2014-10-04 36 views
0
Private Sub NullValidation(sender As Object, e As EventArgs) Handles FirstNameTextBox.Validating, 
      LastNameTextBox.Validating, FatherNameTextBox.Validating, 
    If String.IsNullOrWhiteSpace(sender.Text) Then 
     ErrorProvider1.SetError(sender, "Text box is empty ") 
    End If 
End Sub 

我想檢查我的控件驗證出該事件處理程序(在按鈕單擊處理程序)。但是,因爲它需要發件人和電子參數,它不會起作用。我該怎麼做?調用具有多個控件的控件事件處理程序

因爲控件的數量比我在這裏寫的要多(不僅僅是FirstNameTextBox和LastNameTextBox),它似乎不是一個很好的解決方案,爲它們中的每一個編寫驗證代碼。但是,因爲它需要發件人和電子參數,它不會起作用。我該怎麼做?

+0

爲了使這個問題成爲一個很好的問題,您需要告訴我們什麼是不工作以及您得到了什麼錯誤。 – Enigmativity 2014-10-04 12:18:19

+0

將它們分組在一起就像是一開始就有意義,但只有當你檢查的所有*都是空的。只要你必須測試一個電子郵件或電話或郵政編碼地址格式等,你將有代碼打破這些控制進行特殊測試,然後你的過程臃腫可怕。 – Plutonix 2014-10-04 15:05:58

回答

3

你應該做的第一件事是設置option strict on。您沒有使用正確的方法簽名。所述validating事件定義爲:

Public Delegate Sub CancelEventHandler(ByVal sender As Object, ByVal e As CancelEventArgs) 

變化eEventArgsCancelEventArgs類型。您可能需要導入名稱空間System.ComponentModel。然後將e.Cancel設置爲True以指示驗證未通過。

Private Sub NullValidation(sender As Object, e As CancelEventArgs) Handles FirstNameTextBox.Validating, LastNameTextBox.Validating, FatherNameTextBox.Validating 
    Dim ctl As Control = TryCast(sender, Control) 
    If ((Not ctl Is Nothing) AndAlso String.IsNullOrWhiteSpace(ctl.Text)) Then 
     e.Cancel = True 
     Me.ErrorProvider1.SetError(ctl, "Text box is empty ") 
    End If 
End Sub 
+0

+1選項嚴格單獨...我認爲'(ctl IsNot Nothing)'是一個新手(或母語爲英語的人)更可讀的esp – Plutonix 2014-10-04 15:07:12

+0

謝謝@Plutonix!是的,使用'()'時它的可讀性更高。 – 2014-10-04 15:20:16

+0

「不ctl是什麼」做什麼?無論這個問題沒有解決主要問題。當我點擊提交按鈕時,我想重新驗證驗證。表單上有很多控件並且再次驗證它們似乎不是很明智。 – n3verLieMe 2014-10-04 15:21:46

相關問題