在 C# WINFORM 应用程序中插入/保存/提交数据后,空文本框控件

本文关键字:文本 控件 数据 保存 WINFORM 应用程序 插入 提交 | 更新日期: 2023-09-27 17:56:55

我需要在单击"保存"按钮后清空所有文本框控件,但用户。我有大约 10 个。如何同时清除它们中的文本。我只知道:

textbox1.Text="";

但是,如果我这样做,那么我需要重复这个 no. 我的窗体上的文本框控件,那将是一项劳动任务而不是程序员?

请指导。

在 C# WINFORM 应用程序中插入/保存/提交数据后,空文本框控件

试试这个

foreach(TextBox textbox in this.Controls.OfType<TextBox>())
{
   textbox.Text = string.Empty;
}

如果要递归清除所有文本框,请使用此函数。

void ClearTextBoxes(Control control)
{
    foreach(Control childControl in control.Controls)
    {
         TextBox textbox = childControl as TextBox;
         if(textbox != null)
            textbox.Text = string.Empty;
         else if(childControl.Controls.Count > 0)
             ClearTextBoxes(childControl);
    }
}

如果窗体上的所有文本框没有面板或分组框,则可以执行以下操作:

foreach (var conrol in Controls)
{
    var textbox = conrol as TextBox;
    if (textbox != null)
        textbox.Clear();
}

如果您有面板,请改用panel.Controls

您可以使用以下文章中介绍的 Linq API:

http://www.codeproject.com/KB/linq/LinqToTree.aspx#linqforms

这允许您在 Windows 窗体上应用 Linq-to-XML 样式查询。以下内容将清除作为"this"后代的所有文本框控件:

foreach(TextBox textbox in this.Descendants<TextBox>()
                               .Cast<TextBox>())
{
   textbox.Text = string.Empty;
}

如果你想清除表单上的所有内容,我建议一对实用程序函数,例如:

public static void ClearAllControls(Control.ControlCollection controls)
{
    foreach (var control in controls)
        ClearAllControls(control);
}
public static void ClearAllControls(Control control)
{           
    var textBox = control as TextBox
    if (textBox != null)
    {
        textBox.Text = null;
        return;
    }
    var comboBox = control as ComboBox;
    if (comboBox != null)
    {
        comboBox.SelectedIndex = -1;
        return;
    }
    // ...repeat blocks for other control types as needed
    ClearAllControls(control.Controls);
}

调用第一种方法,传递窗体的 Controls 集合,它将递归向下钻取面板、组等,清除它知道的所有控件。您必须为每种不同的控件类型添加一个块,但至少只需执行一次。这有点蛮力,但它不是那种最终在循环中运行的代码,无论如何,它运行得很快。

仅当正在处理的当前控件尚未被证明是已知类型之一时,才会到达执行递归的最后一行,因此您不必担心意外"钻取"文本框等内容,查找不存在的子控件。