2015-09-30 32 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。空过“”(常量比字符串更好)。我真的很喜欢你所建议的,但:) –