【问题标题】:How To Detect If All Textboxes Are Empty When Clicked Save Button单击保存按钮时如何检测所有文本框是否为空
【发布时间】:2021-02-23 12:51:25
【问题描述】:

我有一个关于 Windows 窗体上有 30 个文本框的问题。我正在尝试测试应用程序。

所有文本框都有验证事件,供您输入、按键和离开事件。

但是打开页面直接按下按钮时的问题,它会在没有警告的情况下保存文本框。

如何在不检查每个文本框的情况下处理所有文本框为空的情况 像这样的条件

      if(String.isNotNullorEpty(textbox1.Text)&&...)

谢谢。

【问题讨论】:

  • 赞成这个问题,因为虽然答案有点简单(递归迭代表单控件并检查它们),但 winforms API afaik 没有一个很好的方法来应对这种常见情况。

标签: c# winforms


【解决方案1】:

您可以简单地循环遍历所有文本框控件并检查其中一个是否有文本。如果 30 个中只有 1 个有文本,那么您的条件为 false。

    bool allEmpty = true;
    foreach (Control c in Controls)
    {   
        if(c is TextBox tb && !String.IsNullOrEmpty(tb.Text))
        {
            allEmpty = false;
            break;
        }   
    }   

【讨论】:

  • 这个答案适用于简单的表单,但是当您将禁用/只读文本框添加到组合中时,您的代码将给出误报。
  • foreach (var t in Controls.OfType<TextBox>()),因此您可以删除检查和强制转换(尽管您可以使用模式匹配)。或Controls.OfType<TextBoxBase>(),如果您还想包含 RichTextBox 控件。
【解决方案2】:

使用 linq:

bool allEmpty = parentControl.Controls.OfType<TextBox>().All(tb => tb.Text == "");

只需设置您的 'parentControl'。

【讨论】:

    【解决方案3】:

    无需检查所有文本框或任何其他循环。

    保持您的 save changes button 处于禁用状态。您已经为每个文本框设置了事件,只需添加到此事件以在文本更改时启用 save changes button。这样就无法在表单打开时立即保存更改

    此方法的另一个优点是当用户关闭表单时,您可以检查是否有任何未保存的更改,并在关闭前询问他是否要保存它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多