visual studio 2010 -清除/重置选项卡中的用户输入.c#

本文关键字:用户 输入 选项 2010 studio 清除 visual | 更新日期: 2023-09-27 17:50:11

我正在尝试创建一个按钮,清除/重置用户输入,然后返回到表单的开始

我的表单有四个选项卡。"清除所有"按钮在第四个选项卡上。

 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;
            }
    }

我正试图保持它尽可能简单,因为我是编程新手,仍在学习。我研究这个问题已经有一段时间了。如果有人可以为我提供一个更简单的方法来做到这一点的例子,或者指出我自己的代码中的一些错误。"为什么它不切换回上一个TAB并清除"那就太好了。

谢谢。

visual studio 2010 -清除/重置选项卡中的用户输入.c#

将当前的foreach替换为如下内容:

foreach(TabPage tab in tabControl1.TabPages)
{
    foreach(Control ctl in tab.Controls)
    {
        // your "if" statements here...                    
    }
}

我认为你需要改变你的循环,包括所有的制表符,而不仅仅是选定的制表符:

foreach (var tab in tabControl1.TabPages)
{ 
    foreach( Control ctrl in ((TabPage)tab).Controls)
    {
// your code
    }
}

在第二个代码示例中,看起来您正在使用i进行循环,然后根本没有对变量进行任何操作。

现在请记住我可能建议的可能不是确切的-我有一段时间没有使用winforms -但是你真正想要做的是使用嵌套的for-each循环,如果它们在窗体上工作的方式,他们似乎在你的第一个例子中。刘易斯的回答给了你一个大致的概念。

确保将"active"选项卡设置为外部for-each循环结束块之后的第一个选项卡。

最后——这是一个"面向对象原则",而不是回答你的问题——我会提取这个方法,这个按钮的点击事件调用这个方法,而不是做它里面的一切。考虑到您可能需要在此表单的其他选项卡中,甚至在不同的选项卡表单中使用"清除所有"按钮的可能性。而不是复制和粘贴这些丑陋的for循环和if语句,您可以在事件处理程序中只调用一次方法。

似乎我得到我的答案晚了20分钟,但如果你真的想清除/重置一切,你应该清除组合框也?

解决方案是有另一个高层与foreach循环,所以我们试图找出TabPagetabControl1之间的关系。我试图把var声明tab,但tab将成为对象类型,以后不能处理tab.Controls

因此,我检查TabControl。TabPageCollection类,并单击其描述中的TabPage链接。我从TabPage类的继承层次结构中得到System.Windows.Forms.TabPage。(我试着向你展示我如何得到正确的类)

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();
            }
        }
    }
}
顺便说一下,我建议把清除所有按钮 TabControl,并把它在Form的某个地方,让清除所有按钮通常可以看到和点击,即使你不是在第4选项卡?