簡體   English   中英

如何以編程方式啟用\\禁用ToolStripMenuItem中的嵌套子菜單項?

[英]How to programmatically enable \ disable nested sub-menu items in a ToolStripMenuItem?

在我的Winforms應用程序中,我有一個帶有嵌套子項的ToolStripMenuItem,其結構如下所示。

文件
。+ ...添加為.... + ...文件
............................夾
............................根文件夾

在“添加為”下,我希望能夠根據需要以編程方式啟用和禁用“文件”,“文件夾”和“根文件夾”。 如何在代碼中訪問這些嵌套項目?

我已經嘗試過ToolStripMenuItem.DropDownItems [0] .Enabled = true \\ false; 但這會影響“添加為”以及菜單層次結構中其下方的所有內容。

如果在上面的代碼中使用大於零的索引,則會出現“索引超出范圍”錯誤。 我該如何實現此功能?

只需簡單地用子名稱引用子項,例如:

FileToolStripMenuItem.Enabled = false;
FolderToolStripMenuItem.Enabled = false;
RootFolderToolStripMenuItem.Enabled = false;

除非我缺少任何東西,否則這似乎是最簡單的答案。

正如漢斯在他的評論中暗示的那樣,您引用的是錯誤的DropDownItems集合。

為此,使用索引會很快變得難看。

僅引用父菜單並遍歷“其”菜單集合更簡單:

private void toggleMenu_Click(object sender, EventArgs e) {
  foreach (ToolStripMenuItem toolItem in addAsToolStripMenuItem.DropDownItems) {
    toolItem.Enabled = !toolItem.Enabled;
  }
}

這是一個丑陋的方法,如果您以后決定重新排列菜單結構,將很難維護該方法:

  foreach (ToolStripMenuItem toolItem in ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems) {
    toolItem.Enabled = !toolItem.Enabled;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM