2015-02-23 60 views
0

我有一個窗體有多個文本框,我想通過文本框循環查看它們是否包含null或空白。如果他們這樣做,我想要返回一個布爾值。檢查所有文本框的不包含空白/空值

的錯誤,我得到: {「無法投型‘System.Windows.Forms.Button’的對象鍵入‘System.Windows.Forms.TextBox’。」} {「無法投 對象類型的 'System.Windows.Forms.Button' 鍵入 'System.Windows.Forms.TextBox'「}

我的代碼:

 private bool EmptyTextBox() 
    { 
     //returns false if all the text boxs contain strings otherwise it will set the messagebox then return true 
     /*if (!Controls.Cast<TextBox>().Any(textBox => String.IsNullOrWhiteSpace(textBox.Text))) return false; 
     MessageBox.Show("Please do not leave a textbox blank.");*/ 
     foreach (TextBox textBox in this.Controls) 
     { 
      if (string.IsNullOrWhiteSpace(textBox.Text)) 
      { 
       MessageBox.Show("Please do not leave a textbox blank."); 
       return false; 

      } 
     } 
     return true; 
    } 

我想知道我是什麼做錯了,我該如何解決這個問題,謝謝你。

+0

您應該檢查控件是否爲文本框類型。 – 2015-02-23 06:23:47

+0

@FrebinFrancis在設計師的「工具箱」中,我選擇了文本框供用戶輸入文本。我手動更改了所有文本框的名稱,所以我相當確定它們是文本框的類型,因爲它們最初都是名稱文本框*編號*。感謝您的答覆。 – 2015-02-23 06:26:30

+0

當你得到this.Controls時,from中的所有控件都會在foreach循環中迭代。應該避免使用this.Controls.OfType ()而不是this.controls。 – 2015-02-23 06:28:43

回答

3

this.Controls將返回所有類型的控件。 Button,TextBox,ComboBox等。在您的foreach聲明中,您正在將所有控件投射到TextBox。這是這個例外的原因。您只需要獲取TextBox控件。 您可以從System.Linq名稱空間使用Enumerable.OfType<TResult>

更改您的代碼爲:

foreach (TextBox textBox in this.Controls.OfType<TextBox>()) 
     { 
      if (string.IsNullOrWhiteSpace(textBox.Text)) 
      { 
       MessageBox.Show("Please do not leave a textbox blank."); 
       return false; 
      } 
     } 

如果你喜歡一行代碼:

private bool EmptyTextBox() 
{ 
    bool result = this.Controls.OfType<TextBox>().Any(x => string.IsNullOrWhiteSpace(x.Text)); 

    if(result==true) MessageBox.Show("Please do not leave a textbox blank."); 

    return !result; 
} 
+0

非常感謝。我會在四分鐘內接受你的答案。 – 2015-02-23 06:33:05

+0

@ZainHassan很高興幫助。 – 2015-02-23 06:37:27

1

試試這個:

你幾乎沒有!

if (!Controls.OfType<TextBox>().Any(textBox => 
String.IsNullOrWhiteSpace(textBox.Text))) return false; 

OfType - 僅返回您提供的類型的元素。

Cast-將嘗試施放的所有元素爲您提供

+0

謝謝你的迴應:)! – 2015-02-23 06:37:36

0

它總是更好地使用必須填寫驗證每一個文本框比後端檢查它的類型。它會給出錯誤消息,而無需回發。

-1
//SIMPLE WAY TO VALIDATE EMPTY SPACES 
if (txtusername.Text.Contains(" ")) 
{ 
    MessageBox.Show("Invalid Username"); 
    txtusername.Clear(); 
    txtusername.Focus(); 
}