我有一个winform(VisualStudio 2013,C#),有几种类型的对象。我想在一种类型的所有对象中更改属性(可见性)。这是我的表述:
private void offToolStripMenuItem_Click(object sender, EventArgs e)
{
GroupBox v = (GroupBox)sender;
foreach (Control g in Controls)
{
GroupBox v = (GroupBox)g;
g.Visible = false;
}
}
问题是,当我想要启动表单时,Visual Studio会向我发送此消息:
错误1:无法在此范围内声明名为“v”的局部变量 因为它会给'v'赋予不同的含义,这已经是 用于“父级或当前”范围以表示其他内容E:\ 3D Tic Tac Toe - druháverze\ 3D Tic Tac Toe - druháverze\ Form1.cs 2203 26 3D Tic Tac Toe - druháverze
无论发出什么消息,我都不会在程序中的任何其他位置使用变量v。我可能正在寻找某种异常处理程序。
谢谢! : - )
答案 0 :(得分:2)
您在当前范围内定义了v
两次:
**GroupBox v = (GroupBox)sender;**
foreach (Control g in Controls)
{
**GroupBox v = (GroupBox)g;**
g.Visible = false;
}
您好像试图在组合框中隐藏所有控件?如果是这种情况,我会将您的代码修改为:
foreach (Control ctrl in groupBox.Controls)
{
ctrl.Visible = false;
}
或者,如果您需要隐藏所有GroupBox
类型:
foreach (Control ctrl in this.Controls)
{
if(ctrl.GetType() == typeof(GroupBox))
ctrl.Visible = false;
}
或者隐藏表单上的所有控件:
foreach (Control ctrl in this.Controls)
{
ctrl.Visible = false;
}
答案 1 :(得分:1)
您在循环之外使用变量v
:GroupBox v = (GroupBox)sender;
所以在循环中你不能再使用v
变量名,因为它已经存在于当前范围内。
但请注意:实际上你根本不需要循环GroupBox v = (GroupBox)g;
,因为你没有在你的循环中使用v
变量。
更新。
从你的问题的这一部分:我可能正在寻找某种异常处理程序。 - 你要问的是什么并不是很清楚。您不需要任何异常处理程序来处理此类错误,因为它是编译时错误,而不是运行时错误。
答案 2 :(得分:0)
-> GroupBox v = (GroupBox)sender;
foreach (Control g in Controls)
{
-> GroupBox v = (GroupBox)g;
g.Visible = false;
}
您可能还想将循环更改为:
foreach (GroupBox g in Controls)
答案 3 :(得分:0)
我对您的问题有点困惑,因为您的代码很可能会产生其他错误。
我认为您可能正在寻找的解决方案应如下所示:
private void offToolStripMenuItem_Click(object sender, EventArgs e)
{
GroupBox v = (GroupBox)sender;
foreach (Control g in Controls)
{
if (g is GroupBox) // only if g is a GroupBox set Visible to false
g.Visible = false;
}
}