在 C# WINFORM 应用程序中插入/保存/提交数据后,空文本框控件
本文关键字:文本 控件 数据 保存 WINFORM 应用程序 插入 提交 | 更新日期: 2023-09-27 17:56:55
我需要在单击"保存"按钮后清空所有文本框控件,但用户。我有大约 10 个。如何同时清除它们中的文本。我只知道:
textbox1.Text="";
但是,如果我这样做,那么我需要重复这个 no. 我的窗体上的文本框控件,那将是一项劳动任务而不是程序员?
请指导。
试试这个
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 集合,它将递归向下钻取面板、组等,清除它知道的所有控件。您必须为每种不同的控件类型添加一个块,但至少只需执行一次。这有点蛮力,但它不是那种最终在循环中运行的代码,无论如何,它运行得很快。
仅当正在处理的当前控件尚未被证明是已知类型之一时,才会到达执行递归的最后一行,因此您不必担心意外"钻取"文本框等内容,查找不存在的子控件。