【问题标题】:If else statement textbox errorif else 语句文本框错误
【发布时间】:2015-09-30 02:57:41
【问题描述】:

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

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

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

【问题讨论】:

  • windows or web application ? if web try to use jquery or javascript.
  • 对于这样一个以前已经用一百种方法解决的基本问题,有这么多答案和努力???我赞成 Fabio 参考处理双打和等,但坦率地说,这个问题是编程 101 以及任何教科书或教程可以帮助你 - 不值得付出更多的努力,因为在 stackoverflow 和其他地方已经如此相似。这里有 2 个问题,空或空检查以及使用单行代码处理多个元素 - 即。迭代器。这些问题之前已经得到了很好的回答,以至于他们不需要另一个没有任何事先努力的问题。

标签: c#


【解决方案1】:

传递列表中的所有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;
    }
}

【讨论】:

  • List list = New List() 我在“新”区域出现错误
  • @KodySnow 它的“新”,而不是“新”。 C# 对关键字区分大小写:P
  • @KodySnow 它也区分大小写 IsNullOrWhiteSpace 必须与文本框的文本一起调用 --> 它将是 String.IsNullOrWhiteSpace(txt.Text)
  • @Nikita 谢谢你,现在一切似乎都在工作!现在要弄清楚如何用 double 类型的变量编写“else”!再次感谢您
  • @KodySnow Welcome。您可能想使用智能感知来保护您免受区分大小写的关键字的影响,在写作区域按 Ctrl+空格,环境会建议您列出有效关键字和变量。此外,您可以通过单击上下投票按钮下方的勾勒勾号将其中一个帖子标记为答案(以最有帮助的为准)
【解决方案2】:

您不能将字符串与布尔值进行比较。 textbox.text 是字符串数据类型。 试试这个,如果你想为不同的文本框显示不同的信息,你必须对所有的文本框使用 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;
    }
}

【讨论】:

  • 太棒了!所以我想我混淆了“虚假”声明。我是否每次都必须为我的所有 16 个盒子做那条线,还是有一个通用的“文本框”我可以使用
  • @KodySnow 您也可以使用 foreach 作为 NonExistent 回答。但是,如果您想根据文本框显示特定消息,则必须手动检查.. 请稍候.. 我正在更新我的答案。
【解决方案3】:

String 和 Boolean 不可比较,您也可以检查所有文本字段是否为空,如 this post 中所述

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

【讨论】:

  • 我不会考虑这个,因为我的屏幕上可能有数百个控件。运行这么大的循环绝对是一个失败。
  • 嗯,你是对的,但是@BhavikPatel 在他的回答中做了很好的过滤,
  • 您实际上在这里将c 转换为TextBox 两次。您只能使用 as 关键字和之后的空检查将其转换一次:msdn.microsoft.com/en-us/library/cscsdfbt.aspx
【解决方案4】:

首先,您的问题中存在类型不匹配错误。 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));
}

用法同上例。

【讨论】:

  • 最好使用 !String.IsNullOrEmpty(textbox.Text) 然后 textbox.Text != ""
  • @Nikita 我同意这一点,已修复。谢谢!
  • 不过,它也照顾 null 。另外,我更喜欢使用 String.Empty 而不是“”(常量比字符串更好)。我真的很喜欢你的建议:)
  • @_@ 让我的头受伤,我在这里几乎没有初学者水平...每次我进入 Private bool 行时,我都会遇到 300 个错误...。我应该删除我的 if 函数吗?
  • @KodySnow 类似于私有 bool 行下的东西称为函数(或者在 C# 的情况下也称为方法)。我的猜测是你试图在你的函数中复制我的函数,这在语法上是不正确的。您应该直接在类中编写它(我猜,在您的情况下是表单类)。要使用 AllOfType 之类的方法,您还应该在编写代码的文件的最顶部添加行 using System.Linq;
猜你喜欢
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2015-11-18
  • 2015-01-05
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多