清除/重置选项卡中的用户输入。C#
我试图创建一个按钮,用于清除/重置用户输入,然后返回表单的开头 我的表格有四个标签。“全部清除”按钮位于第四个选项卡上清除/重置选项卡中的用户输入。C#,c#,visual-studio-2010,tabs,C#,Visual Studio 2010,Tabs,我试图创建一个按钮,用于清除/重置用户输入,然后返回表单的开头 我的表格有四个标签。“全部清除”按钮位于第四个选项卡上 private void cmdClearAll_Click(object sender, EventArgs e) { foreach (Control ctrl in tabControl1.SelectedTab.Controls) { if (ctrl is TextBox)
private void cmdClearAll_Click(object sender, EventArgs e)
{
foreach (Control ctrl in tabControl1.SelectedTab.Controls)
{
if (ctrl is TextBox)
{
(ctrl as TextBox).Text = string.Empty;
}
if (ctrl is Label)
{
(ctrl as Label).Text = string.Empty;
}
if (ctrl is ListBox)
{
(ctrl as ListBox).Items.Clear();
}
if (ctrl is ComboBox)
{
(ctrl as ComboBox).SelectedIndex = -1;
}
}
}
上面的代码只在最后一个选项卡上起作用,我试图实现的是在清除/重置过程中的所有内容时,从第4个选项卡循环到第1个选项卡
我想我可以通过创建一个for循环并在其内部添加foreach来实现这一点,但有些地方出了问题
for (int i = 3; i <= tabControl1.SelectedIndex; i--)
{
foreach (Control ctrl in tabControl1.SelectedTab.Controls)
{
if (ctrl is TextBox)
{
(ctrl as TextBox).Text = string.Empty;
}
if (ctrl is Label)
{
(ctrl as Label).Text = string.Empty;
}
if (ctrl is ListBox)
{
(ctrl as ListBox).Items.Clear();
}
if (ctrl is ComboBox)
{
(ctrl as ComboBox).SelectedIndex = -1;
}
}
for(int i=3;i我认为您需要更改循环以包括所有选项卡,而不仅仅是所选选项卡:
foreach (var tab in tabControl1.TabPages)
{
foreach( Control ctrl in ((TabPage)tab).Controls)
{
// your code
}
}
将当前的foreach
替换为以下内容:
foreach(TabPage tab in tabControl1.TabPages)
{
foreach(Control ctl in tab.Controls)
{
// your "if" statements here...
}
}
在您的第二个代码示例中,看起来您正在使用i获得一个循环,然后根本不使用变量执行任何操作
现在请记住,我的建议可能并不准确——我已经有一段时间没有使用winforms了——但是如果每个循环都像第一个示例中那样使用表单,那么您真正想要做的是为每个循环使用嵌套
确保将“活动”选项卡设置为每个回路外部闭合块后的第一个选项卡
最后,这是一个“面向对象的原则”,而不是对你的问题的回答——我会把这个方法提取到这个按钮的点击事件调用这个方法,而不是做它里面的每件事。考虑你可能想要一个“清除所有”的可能性。此窗体的其他选项卡中的按钮,甚至是其他选项卡形式中的按钮。与复制和粘贴这些for循环和if语句不同,您只需在事件处理程序中调用该方法一次
这将使您的代码更具可读性,您的应用程序的功能也会更强大。我似乎晚了20分钟才得到答案,但如果您真的想清除/重置所有内容,您也应该清除组合框?
解决方案是使用另一个更高的层与foreach循环,因此我们试图找出TabPage和tabControl1之间的关系。我试图使用var
声明选项卡
,但是选项卡
将成为对象类型,并且无法处理选项卡控件
稍后
因此,我检查并单击其说明中的TabPage链接。我从的继承层次结构中获得System.Windows.Forms.TabPage
。(我试图向您展示如何获得正确的类)
顺便说一句,我建议将“全部清除”按钮从选项卡控件中取出,并将其放在表单中的某个位置,这样即使您不在第四个选项卡中,也可以看到并单击“全部清除”按钮?谢谢您的帮助,并在组合框中发现了错误。我发现了错误,因为我试图构建一个相同的按钮检查我的代码功能,它在ComboBox上运行的很奇怪,哈哈
private void cmdClearAll_Click(object sender, EventArgs e)
{
//loop in TabPages collection in tabControl1
foreach (System.Windows.Forms.TabPage tab in tabControl1.TabPages)
{
//loop in all controls in looping TabPage
foreach (Control ctrl in tab.Controls)
{
if (ctrl is TextBox)
{
(ctrl as TextBox).Text = string.Empty;
}
if (ctrl is Label)
{
(ctrl as Label).Text = string.Empty;
}
if (ctrl is ListBox)
{
(ctrl as ListBox).Items.Clear();
}
if (ctrl is ComboBox)
{
//(ctrl as ComboBox).SelectedIndex = -1;
(ctrl as ComboBox).Items.Clear();
}
}
}
}