我想创建一个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和其他地方已经非常类似。这里有两个问题,空或空检查和处理与单行代码的多个元素 - 即。迭代器。这些问题已经得到了很好的回答,因此他们不需要另一个没有任何先验努力的问题。 –