我正在使用学生记录输入窗口表单。我希望在提交数据后,表单中的所有字段(例如单选按钮、组合框等)和消息(警告和成功)都应该被重置,以便新用户可以添加数据。
- 在C#中有没有内置的函数可以重置表单?
- 还是我需要编写清除方法来实现这一点?
- 或者我可以重新生成表单吗?
我正在使用学生记录输入窗口表单。我希望在提交数据后,表单中的所有字段(例如单选按钮、组合框等)和消息(警告和成功)都应该被重置,以便新用户可以添加数据。
您必须首先清空控件,然后使用InitializeComponent
方法才能完美工作。
this.Controls.Clear();
this.InitializeComponent();
你可以通过以下两种方式实现:
1)你可以使用一个方法清空表单字段,例如public void clear()
。每当你想要清空表单时,只需调用此方法。
2)第二种方法是销毁表单实例,并生成同一表单的新实例,然后显示它。
我建议你使用第一种方法。
这就是我在每个页面中创建的内容。
private void ClearControls()
{
try
{
txtUserName.Text = string.Empty;
//txtPassword.Text = string.Empty;
txtFName.Text = string.Empty;
txtMName.Text = string.Empty;
txtLName.Text = string.Empty;
lblUserType.Text = string.Empty;
btnSave.Text = "Save";
fnMessage(false, "");
}
catch (Exception ex)
{
fnMessage(true, ex.Message);
}
}
Thanks
你可以重新创建表单实例,或者尝试类似于这个的方法(未经测试):
foreach (Control ctl in this.Controls)
{
switch (ctl.GetType().ToString())
{
case "TextBox":
ctl.Text = null;
break;
case "ComboBox":
ctl.Text = null;
break;
}
}
显然,您可以包含任意数量的不同类型的控件,并引入其他标准(即控件名称以“xyz”开头或控件位于特定面板内)。
与其他建议相比,这种方法的优点在于,如果您有数十个相同类型的控件(通常是文本框),只需几行代码即可覆盖所有内容。此外,如果您添加更多已覆盖类型的控件,则无需重新访问代码以进行更新。也许您甚至可以将其创建为窗体的扩展方法?
希望对你有所帮助。
我曾经遇到同样的问题,我的表单包含嵌套控件。我尝试了CJM的方法,它确实起作用,但是由于存在控件嵌套(选项卡控件、容器、用户控件等),我不得不编写递归函数。
如果你想要递归清除整个表单,请尝试以下代码片段:
private void clearRecursive(Control control)
{
foreach (Control subcontrol in control.Controls)
{
switch (subcontrol.GetType().ToString().Replace("System.Windows.Forms.", ""))
{
case "TextBox":
TextBox textBox = (TextBox)subcontrol;
textBox.Text = null;
break;
case "ComboBox":
ComboBox comboBox = (ComboBox)subcontrol;
if (comboBox.Items.Count > 0)
comboBox.SelectedIndex = 0;
break;
case "CheckBox":
CheckBox checkBox = (CheckBox)subcontrol;
checkBox.Checked = false;
break;
case "RadioButton":
RadioButton radioButton = (RadioButton)subcontrol;
radioButton.Checked = false;
break;
case "TreeView":
TreeView tv = (TreeView)subcontrol;
foreach (TreeNode node in tv.Nodes)
{
node.Checked = false;
CheckChildren(node, false);
}
break;
case "ListBox":
ListBox listBox = (ListBox)subcontrol;
listBox.Items.Clear();
break;
case "CheckedListBox":
CheckedListBox chklstbox = (CheckedListBox)subcontrol;
for (int i = 0; i < chklstbox.Items.Count; i++)
{
chklstbox.SetItemCheckState(i, CheckState.Unchecked);
}
break;
}
if (subcontrol.HasChildren)
clearRecursive(subcontrol);
}
}
调用InitializeComponent
方法和Form_Load
方法。