簡體   English   中英

VB .NET驗證許多ToolstripMenuItems的檢查狀態

[英]VB .NET Verify checked status of many ToolstripMenuItems

當我單擊另一個菜單項時,我想取消選中MenuStrip中主ToolStripMenuItem(稱為MyMainMenu)的所有菜單項。 主菜單包含一些菜單項和一個分隔符。 我嘗試了以下代碼:

Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
  MnuItem.Checked = True

  For Each Mnu As ToolStripMenuItem In Me.MyMainMenu.DropDownItems
    If Not Mnu Is MnuItem Then
      Mnu.Checked = False
    End If
  Next
End Sub

我從每個菜單項(分隔符除外)調用該代碼。 當我單擊菜單項時,程序崩潰,提示他無法將其從ToolStripSeparator強制轉換為ToolStripMenuItem。 可以在Microsoft .NET文檔站點上出於相同的目的找到相同的代碼,但是如果相同的菜單項包含不同種類的項(分隔符,文本框...),則未指定可以執行的操作。

你知道我該如何解決這個問題?

謝謝,

再見

您的代碼假定DropDownItems僅返回ToolStripmenuItem類型的項目,但實際上它返回ToolstripItemCollection

因此,您需要額外檢查以確保僅使用您感興趣的類型:

Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
    MnuItem.Checked = True

    For Each item In Me.MyMainMenu.DropDownItems
        If TypeOf item Is ToolStripMenuItem Then
            Dim mnu = CType(item, ToolStripMenuItem)
            If Not mnu Is MnuItem Then
                mnu.Checked = False
            End If
        End If
    Next
End Sub

不過,可能更好的選擇是過濾原始集合以僅返回特定類型的對象:

Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
    MnuItem.Checked = True

    For Each mnu In Me.MyMainMenu.DropDownItems.OfType(Of ToolStripMenuItem)
        If Not mnu Is MnuItem Then
            mnu.Checked = False
        End If
    Next
End Sub

請注意,您可以進一步簡化例程,以僅檢查傳入的項目:

Private Sub CheckCheckedStatusMenu(ByVal MnuItem As ToolStripMenuItem)
    For Each mnu In Me.MyMainMenu.DropDownItems.OfType(Of ToolStripMenuItem)
        mnu.Checked = (mnu Is MnuItem)
    Next
End Sub

暫無
暫無

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

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