使用字符串作为控制对象

时间:2012-07-06 13:11:19

标签: c# .net winforms

对于我目前的项目,我用“menuStrip”和一些“ToolStripMenuItem”创建了一个MDIform。 几个按钮和一个devexpress“NavbarControl”

目的是用户使用userID登录 应用程序将获得特定“控件”的数据行 在这一行中他们是一个bool,如果真的那么Item必须是可见的,否则该项必须是不可见的。

Datarow还包含项目的名称。

所以我使用:

this.Controls[item].Visible = true;

item = string(项目名称)

如果我用它来隐藏menustrip本身,它就有效 如果我在MenuStipItems上尝试它,它会给出一个空引用异常。

如何控制菜单内容中的项目,只能按项目名称控制???

代码:

    DataTable dt = GetData();
    foreach (DataRow row in dt.Rows)
    {
        string item = row["ItemNaam"].ToString();
        foreach (string rol in Rollen)
        {
            DataRow dr = GetDataByItemNaam(item);
            if (Convert.ToBoolean(dr[rol]) == true)
            {
                this.Controls[item].Visible = true; //Show Item
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

MenuStrip控件拥有自己的集合。因此,要引用菜单条项,请参考menustrip父项中的项目:

if (this.menuStrip1.Items.ContainsKey(item))
  this.menuStrip1.Items[item].Visible = true;

答案 1 :(得分:0)

我已经解决了这个问题:

我在foreach循环中创建了一个foreach循环 每个循环查找项目的名称,然后查找上一项目中项目的名称。 如果名称与给定名称匹配,则将可见性设置为true。

这是2个级别,我创建了另外两个额外的foreach循环,以便更深入(起始)到菜单中的4个级别的项目。

也许它不是正确/最快的方式,但它的工作方式应该如此。