我想創建一個if else語句來顯示一個消息框,如果沒有輸入。如果else語句文本框錯誤
If(textbox1.text==false)
{
messagebox.show("please fill in the boxes")
}
我現在有16個不同的文本框,我是否需要使用每個if else語句?
我想創建一個if else語句來顯示一個消息框,如果沒有輸入。如果else語句文本框錯誤
If(textbox1.text==false)
{
messagebox.show("please fill in the boxes")
}
我現在有16個不同的文本框,我是否需要使用每個if else語句?
通過所有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;
}
}
列表
@KodySnow其「新」,而不是「新」。 C#是關鍵字區分大小寫:P –
@KodySnow它是區分大小寫也IsNullOrWhiteSpace必須與文本框的文本調用 - >它將是String.IsNullOrWhiteSpace(txt.Text) –
您無法將字符串與布爾值進行比較。 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;
}
}
真棒!所以我想我是在混淆「虛假」的說法。我將不得不每次爲我的所有16個盒子做這一行,或者是否有我可以使用的通用「文本框」 –
@KodySnow您也可以使用Foreach作爲不存在的答案。但如果你想按照文本框顯示特定的消息,你必須手動檢查.. PLZ等..我正在更新我的答案。 –
字符串和布爾沒有可比性,你也可以檢查,如果想在列表和循環在this post
if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)) {
//Textfield is empty
}
我不會考慮這個,因爲我可能在屏幕上有數百個控件。運行這樣一個巨大的循環肯定是一個垮臺。 –
嗯,你是對的,但@BhavikPatel做了一個很好的工作,在他的回答中進行篩選, –
實際上你在這裏將'c'轉換成'TextBox'兩次。您可以使用'as'關鍵字只投射一次,然後進行空值檢查:https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx – bashis
首先,你必須在你的問題類型不匹配錯誤。 TextBox
的Text
屬性爲string
類型,而關鍵字false
爲bool
類型。您可以在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));
}
用法是一樣的前面的示例所示。
這是更好的使用!String.IsNullOrEmpty(textbox.Text)然後textbox.Text!=「」 –
@Nikita我同意,修復它。謝謝! – bashis
不過,它也照顧零。另外,我更喜歡使用String。空過「」(常量比字符串更好)。我真的很喜歡你所建議的,但:) –
Windows或Web應用程序?如果Web嘗試使用jQuery或JavaScript。 – nichu09
這麼多的答案和努力已經以百種方式解決了這樣一個基本問題?我向法比奧提出了處理雙打和其他方面的爭議,但坦率地說,這個問題是編程101以及任何教科書或教程可以幫助您的 - 不值得更多的努力,因爲在stackoverflow和其他地方已經非常類似。這裏有兩個問題,空或空檢查和處理與單行代碼的多個元素 - 即。迭代器。這些問題已經得到了很好的回答,因此他們不需要另一個沒有任何先驗努力的問題。 –