我正在使用訪問控制列表,其中必須根據分配的角色顯示/隱藏菜單項。我已經通過TAG提到每個菜單項目。現在我有一個數組存儲所有TAG名稱。如何通過標記或名稱引用菜單項
是否有可能我只是循環通過標籤名稱數組,然後通過標籤或名稱引用菜單項控件,而不通過所有menuStrip項目循環並比較當前控件並使其可見?
感謝
我正在使用訪問控制列表,其中必須根據分配的角色顯示/隱藏菜單項。我已經通過TAG提到每個菜單項目。現在我有一個數組存儲所有TAG名稱。如何通過標記或名稱引用菜單項
是否有可能我只是循環通過標籤名稱數組,然後通過標籤或名稱引用菜單項控件,而不通過所有menuStrip項目循環並比較當前控件並使其可見?
感謝
我不明白你想實現什麼,但也許這個代碼是給你的幫助:
private void button1_Click(object sender, EventArgs e) {
var menus = new string[] { "Every", "menu", "you", "want", "to", "show" };
foreach (var mnu in this.GetType().GetFields(
BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.GetField)) {
var member = mnu.GetValue(this) as MenuStrip;
if (null != member) {
member.Visible = (menus.Contains(member.Tag.ToString()));
}
}
}
我想我最好現在明白。以下代碼將使ToolStripMenuItem
可見(或更改爲您的對象所在的任何類型)。我使用名稱,因爲使用標籤,您將不得不枚舉所有對象。
private void ShowItem(string menuItemName) {
var field = this.GetType().GetField(
menuItemName,
BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.GetField);
var mnu = field.GetValue(this) as ToolStripMenuItem;
if (null != mnu) {
mnu.Visible = true;
}
}
請注意,this
必須是包含菜單的窗體。
Wii iit搜索兒童也在第n級? – Volatil3 2013-04-04 08:45:41
如果您正在枚舉ToolStrimMenuItems:是的。 – 2013-04-04 09:56:33
這裏我解釋一下:http://pastie.org/7310583 – Volatil3 2013-04-04 07:20:35
好吧,然後根據您的需要調整上面的代碼。順便說一句,它使用System.Reflection和System.Linq。你可以省略'menus'變量,只是比較你想要的特定標籤。 – 2013-04-04 07:33:33
* var member = mnu.GetValue(this)as MenuStrip; *它始終爲NULL。我不能只是得到* member.Tag *?我可以看到*名稱*屬性,但沒有標籤 – Volatil3 2013-04-04 07:45:32