簡體   English   中英

ToolStripMenuSeparator防止以編程方式禁用/啟用ToolStripMenuItems

[英]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 ,否則,一旦菜單中有ToolStripTextboxToolStripCombobox ,您的代碼就會失敗。 同樣, 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.

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