在我的应用程序中我在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 = "";
}
}
}
}
答案 0 :(得分:2)
如果您要在要清除的特定标签页中控制页面布局的类,则最好在该类中创建一个公共或内部方法(例如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);
答案 1 :(得分:0)
您正在关注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
以外的控件对我来说是错误的。正如您所知,这对于组合,图像和单选按钮不起作用。
此外,如果您将控件嵌套到面板等中,则不会清除它们。容器有自己的嵌套控件集合,而控件又可以是容器,依此类推。
恕我直言你可以逐一明确地重置表单控件,而不是试图在表单上动态找到它们。通过这种方式,您可以在设计时自由移动控件,而无需担心破坏重置逻辑。
其他建议:您还可以在设计时将控件附加到您自己的IExtenderProvider
组件的实例,该组件将根据其类型适当地重置控件。