如果else语句文本框错误

时间:2015-09-30 02:57:41

标签: c#

我正在尝试创建一个if else语句,以便在没有输入时显示消息框。

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

我目前有16个不同的文本框,我是否需要为每个文本框使用if else语句?

4 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:2)

您无法将字符串与布尔值进行比较。 textbox.text是一种字符串数据类型。 试试这个,如果你想为不同的文本框显示不同的消息,你必须对所有的texbox使用if-else语句。

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循环可以轻松地将处理程序添加到文本框中:

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

使用validating事件来处理它

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;
    }
}

答案 2 :(得分:2)

字符串和布尔值不具有可比性,您也可以检查所有文本字段是否为空,如this post中所述

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

答案 3 :(得分:1)

首先,您的问题中存在类型不匹配错误。 TextBox的{​​{1}}属性属于string类型,而关键字false属于bool类型。您可以在here中详细了解类型。 解决这个问题的方法是:

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

其次,现代编程完全是here原则。所以,答案是没有,你不需要为每个代码编写相同的代码。

你实际上至少可以通过两种方式去做。 第一种方法是创建一些文本框的集合(例如DRY)。然后你会创建一个迭代这个集合的方法,如下所示:

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));
}

用法与上一个示例相同。