2015-09-30 163 views
0

我想創建一個if else語句來顯示一個消息框,如果沒有輸入。如果else語句文本框錯誤

If(textbox1.text==false) 
{ 
    messagebox.show("please fill in the boxes") 
} 

我現在有16個不同的文本框,我是否需要使用每個if else語句?

+0

Windows或Web應用程序?如果Web嘗試使用jQuery或JavaScript。 – nichu09

+0

這麼多的答案和努力已經以百種方式解決了這樣一個基本問題?我向法比奧提出了處理雙打和其他方面的爭議,但坦率地說,這個問題是編程101以及任何教科書或教程可以幫助您的 - 不值得更多的努力,因爲在stackoverflow和其他地方已經非常類似。這裏有兩個問題,空或空檢查和處理與單行代碼的多個元素 - 即。迭代器。這些問題已經得到了很好的回答,因此他們不需要另一個沒有任何先驗努力的問題。 –

回答

3

通過所有TextBoxes描述的所有文本框爲空它

//Create list once in the constructor of main form or window 
List<TextBox> list = new List<TextBox>() 

//... 
list.Add(textbox1); 
list.Add(textbox2);' 
//... 

Then loop it 

foreach(TextBox txt in list) 
{ 
    if(String.IsNullOrWhiteSpace(txt.Text)) 
    { 
     messagebox.Show("please fill in the boxes"); 
     break; 
    } 
} 

更新
如果所有文本框都只有數字/雙輸入,則使用TryParse檢查,如果值是有效

所有的
foreach(TextBox txt in list) 
{ 
    Double temp; 
    if(Double.TryParse(txt.Text, temp) == true) 
    { 
     //save or use valid value 
     Debug.Print(temp.ToString()); 
    } 
    else 
    { 
     messagebox.Show("please fill in the boxes"); 
     break; 
    } 
} 
+0

列表 list =新列表()我在「新」區域遇到錯誤 –

+0

@KodySnow其「新」,而不是「新」。 C#是關鍵字區分大小寫:P –

+0

@KodySnow它是區分大小寫也IsNullOrWhiteSpace必須與文本框的文本調用 - >它將是String.IsNullOrWhiteSpace(txt.Text) –

2

您無法將字符串與布爾值進行比較。 textbox.text是一個字符串數據類型。 試試這個,如果你想爲不同的文本框顯示不同的消息,你必須爲所有的texbox使用if-else語句。

foreach(TextBox tb in this.Controls.OfType<TextBox>().Where(x => x.CausesValidation == true)) 
{ 
    tb.Validating += textBox_Validating; 
} 

使用validating事件:

If(textbox1.text=="") 
{ 
messagebox.show("please fill in the boxes") 
} 

If(string.IsNullOrEmpty(textbox1.text) == true) 
{ 
    messagebox.show("please fill in the boxes") 
} 

multiple textbox驗證

添加處理程序的文本框很容易通過表單構造一個foreach循環完成來處理它

private void textBox_Validating(object sender, CancelEventArgs e) 
{ 
    TextBox currenttb = (TextBox)sender; 
    if(currenttb.Text == "") 
     MessageBox.Show(string.Format("Empty field {0 }",currenttb.Name.Substring(3))); 
     e.Cancel = true; 
    else 
    { 
     e.Cancel = false; 
    } 
} 
+0

真棒!所以我想我是在混淆「虛假」的說法。我將不得不每次爲我的所有16個盒子做這一行,或者是否有我可以使用的通用「文本框」 –

+0

@KodySnow您也可以使用Foreach作爲不存在的答案。但如果你想按照文本框顯示特定的消息,你必須手動檢查.. PLZ等..我正在更新我的答案。 –

2

字符串和布爾沒有可比性,你也可以檢查,如果想在列表和循環在this post

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)) { 
    //Textfield is empty 
} 
+0

我不會考慮這個,因爲我可能在屏幕上有數百個控件。運行這樣一個巨大的循環肯定是一個垮臺。 –

+0

嗯,你是對的,但@BhavikPatel做了一個很好的工作,在他的回答中進行篩選, –

+1

實際上你在這裏將'c'轉換成'TextBox'兩次。您可以使用'as'關鍵字只投射一次,然後進行空值檢查:https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx – bashis

1

首先,你必須在你的問題類型不匹配錯誤。 TextBoxText屬性爲string類型,而關鍵字falsebool類型。您可以在here中閱讀更多類型。 的修復這個問題將是:

If (!string.IsNullOrEmpty(textbox1.Text)) 
{ 
    Messagebox.Show("please fill in the boxes") 
} 

其次,現代的編程是所有關於DRY原則。所以,答案是沒有,你不需要爲他們每個人寫同一段代碼。

你至少可以用兩種方法做到這一點。 第一種方法是創建某種文本框的集合(例如array)。然後,你將創建一個方法來遍歷這個集合是這樣的:

private bool AllTextboxesAreFilled() 
{ 
    var textboxes = new TextBox[] { textBox1, textBox2, textBox3 }; 
    return textboxes.All(textbox => !string.IsNullOrEmpty(textbox.Text)); 
} 

然後調用它像:

if (!AllTextboxesAreFilled()) 
{ 
    MessageBox.Show("please fill in the boxes"); 
} 

第二種方法是使這些文本框的一些控制的孩子(一個Panel ,例如),然後遍歷這些孩子。這樣,你不需要創建一個額外的集合(而且要記住,你需要更多的文本框來添加元素在它的情況下):

private bool AllTextboxesAreFilled() 
{ 
    return holderPanel.Controls.OfType<TextBox>().All(textbox => !string.IsNullOrEmpty(textbox.Text)); 
} 

用法是一樣的前面的示例所示。

+1

這是更好的使用!String.IsNullOrEmpty(textbox.Text)然後textbox.Text!=「」 –

+0

@Nikita我同意,修復它。謝謝! – bashis

+0

不過,它也照顧零。另外,我更喜歡使用String。空過「」(常量比字符串更好)。我真的很喜歡你所建議的,但:) –