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并清除"那就太好了。
谢谢。
将当前的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循环,所以我们试图找出TabPage和tabControl1之间的关系。我试图把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选项卡?