当单击“无”按钮时,清除选项卡页面上的所有数据
本文关键字:数据 选项 清除 单击 按钮 | 更新日期: 2023-09-27 17:50:49
在我的应用程序我提交数据到数据库上的tabControls页面(页面:tabPage2),我想当点击提交按钮首先保存数据到数据库(我实现这一点)的问题会问什么会做吗?如果用户点击no按钮,tabpage2上的所有字段都将重置。所以我写了一个像下面这样的脚本,但它不清除字段。
if (dr == DialogResult.Yes)
{
for (int i = 0; i < this.tabControl1.Controls.Count; i++)
{
if (this.tabControl1.SelectedTab == tabPage2)
{
if (tabPage2.Controls[i] is TextBox)
{
tabPage2.Controls[i].Text = "";
}
if (tabPage2.Controls[i] is ComboBox)
{
tabPage2.Controls[i].Text = "";
}
if (tabPage2.Controls[i] is PictureBox)
{
tabPage2.Controls[i].Text = "";
}
if (tabPage2.Controls[i] is RadioButton)
{
tabPage2.Controls[i].Text = "";
}
}
}
}
如果您在想要清除的特定选项卡页面中控制页面布局的类,那么最好在该类(例如Clear()
)中创建一个公共或内部方法,可以访问其每个成员控件并直接清除它们。这是最简单的方法,通常也应该适用。
如果您而不是需要它来处理具有未知结构的页面,您可能需要这样的方法:
private void ClearControls(Control parentControl)
{
foreach (Control ctrl in parentControl.Controls)
{
TextBox ctrlText;
ComboBox ctrlCombo;
PictureBox ctrlPicture;
RadioButton ctrlRadio;
// Pay careful attention to the parentheses...
if ((ctrlText = ctrl as TextBox) != null)
{
ctrlText.Text = string.Empty;
}
else if ((ctrlCombo = ctrl as ComboBox) != null)
{
ctrlCombo.SelectedIndex = -1;
}
else if ((ctrlPicture = ctrl as PictureBox) != null)
{
// Logic to clear a PictureBox called ctrlPicture
}
else if ((ctrlRadio = ctrl as RadioBox) != null)
{
// Logic to clear a RadioButton called ctrlRadio
}
else if (ctrl.Controls.Count > 0)
{
ClearControls(ctrl); // Recursively clear contained controls.
}
}
}
使用调用从原始处理程序启动它:
if (dr == DialogResult.Yes)
ClearControls(this.tabControl1);
您正在遍历TabControl
子控件的集合,而不是实际的TabPage
子控件。
把你的代码改成:
if (dr == DialogResult.Yes && this.tabControl1.SelectedTab == tabPage2)
{
foreach (var ctrl in tabPage2.Controls)
{
if (ctrl is TextBox || ctrl is ComboBox || ctrl is PictureBox || ctrl is RadioButton)
{
ctrl.Text = "";
}
}
}
我应该说,虽然设置Text
属性为"对我来说,TextBox
以外的控件感觉相当错误。你会发现,这对组合、图像和单选按钮不起作用。
同样,如果你有嵌套到面板或类似的控件,它们将不会被清除。容器有它们自己嵌套的控件集合,这些控件也可以是容器,依此类推。
IMHO 这将是更好的为您显式重置表单控件一个一个,而不是试图找到他们动态在您的表单。这样,您就可以在设计时自由地移动控件,而不必担心会破坏重置逻辑。
附加建议:您也可以在设计时将控件附加到您自己的IExtenderProvider
组件的实例,该组件将根据控件的类型适当地重置控件。