对于我目前的项目,我用“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
}
}
}
答案 0 :(得分:1)
MenuStrip控件拥有自己的集合。因此,要引用菜单条项,请参考menustrip父项中的项目:
if (this.menuStrip1.Items.ContainsKey(item))
this.menuStrip1.Items[item].Visible = true;
答案 1 :(得分:0)
我已经解决了这个问题:
我在foreach
循环中创建了一个foreach
循环
每个循环查找项目的名称,然后查找上一项目中项目的名称。
如果名称与给定名称匹配,则将可见性设置为true。
这是2个级别,我创建了另外两个额外的foreach
循环,以便更深入(起始)到菜单中的4个级别的项目。
也许它不是正确/最快的方式,但它的工作方式应该如此。