我正在尝试创建一个if else语句,以便在没有输入时显示消息框。
If(textbox1.text==false)
{
messagebox.show("please fill in the boxes")
}
我目前有16个不同的文本框,我是否需要为每个文本框使用if else语句?
答案 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));
}
用法与上一个示例相同。