-3
foreach (Control c in this.Controls)
{
   if (c is Button)
   {
      Button b = (Button)c;
      if (b.Tag.Equals("submit") && b.Tag.Equals("save"))
      {
         b.Visible = false;
      }
   }
}

我试图隐藏这些以标记属性按钮,其他将在表单加载时显示这是我的代码不起作用。但错误显示“对象引用未设置............”

4

1 回答 1

6

问题1:你真的设置Tag了什么吗?
问题2:为什么使用Tag而不是按钮实例本身?
问题3:Tag应该如何同时是一个值和另一个值?

关于问题 2):你可以这样做

if (c == btnSubmit) { ... }
if (c == btnSave) { ... }

假设您在属性中命名了这两个按钮。这也是我推荐的解决方案!

关于问题 3):您的代码应该(可能)阅读

if (b.Tag.ToString().Equals("submit") || b.Tag.ToString().Equals("save"))
{
   b.Visible = false;
}

让我感到震惊的是,假设按钮已相应命名,您的整个代码可以重构为以下内容:

btnSubmit.Visible = false;
btnSave.Visible = false;

没有循环,什么都没有!默认情况下,表单上的每个控件在类中也有一个实例成员(除非您在控件的属性中另外配置它​​)。那么为什么要遍历表单上的所有控件(顺便说一下,如果按钮在 a 内,它甚至都不起作用Panel)只是为了找到两个你想隐藏的按钮,当你可以“用他们的名字来称呼它们”时第一名?

于 2013-05-02T07:11:51.357 回答