![](/img/trans.png)
[英]Access and disable ToolStripItems (ToolStripButtons, ToolStripMenuItems) using their names
[英]ToolStripMenuSeparator prevents Disable/Enable programmatically of ToolStripMenuItems
我正在使用下面的這段代碼來禁用某些標簽為M2
ToolStripMenuItems
。 問題是代碼可以工作,直到它“滿足”第一個ToolStripMenuSeparator
。 即使ToolStripMenuItems
下的ToolStripMenuSeparator
具有M2
作為標記,仍保持啟用狀態。 如果我手動刪除ToolStripMenuSeparator
一切正常!!! 如果菜單項之間有分隔符,會有什么區別?
Dim MenuItem As ToolStripMenuItem
For Each MenuItem In MainForm_MenuStrip.Items
If (MenuItem.GetType() Is GetType(ToolStripMenuItem)) Then
Dim MenuSubItem As ToolStripMenuItem
For Each MenuSubItem In MenuItem.DropDownItems
If (MenuSubItem.GetType() Is GetType(ToolStripMenuItem)) And MenuSubItem.Tag = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next
主要問題是ToolStripSeparator
無法轉換為ToolStripMenuItem
。 因此,在循環到達ToolStripSeparator
,以下行將引發InvalidCastException
:
For Each MenuSubItem In MenuItem.DropDownItems
如果您強制轉換為ToolStripItem
它將可以正常工作。 此外,您應該將MenuItem
定義為Object
,否則,一旦菜單中有ToolStripTextbox
或ToolStripCombobox
,您的代碼就會失敗。 同樣, GetType
-parts也可以用TypeOf
代替。
For Each MenuItem As Object In Mainform_MenuStrip.Items
If TypeOf MenuItem Is ToolStripMenuItem Then
For Each MenuSubItem As ToolStripItem In MenuItem.DropDownItems
If TypeOf MenuSubItem Is ToolStripMenuItem AndAlso MenuSubItem.Tag = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next
本示例使用后期綁定。
以下Option Strict On
也可用於Option Strict On
:
For Each MenuItem As ToolStripItem In Mainform_MenuStrip.Items
If TypeOf MenuItem Is ToolStripMenuItem Then
For Each MenuSubItem As ToolStripItem In DirectCast(MenuItem, ToolStripMenuItem).DropDownItems
If TypeOf MenuSubItem Is ToolStripMenuItem AndAlso CStr(MenuSubItem.Tag) = "M2" Then
MenuSubItem.Enabled = False
End If
Next
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.