当前位置:编程学习 > C#/ASP.NET >>

请教关于MenuStrip问题

1.DropDownItem的子项能否设置为不允许双选,只单选?
2.是否有selectedItemChanged事件,而不是dropDownItemClick事件?
3.能否获取当前选择的item,也就是是否有selectedItem属性?

是不是可以不用MenuStrip控件,有别的方法吗?

--------------------编程问答-------------------- 大家没有使用MenuStrip的吗? --------------------编程问答-------------------- 可以多选,设置MenuItem的Checked属性为True --------------------编程问答-------------------- 2、有CheckedChanged事件
3、Checked属性为True的表示选中 --------------------编程问答-------------------- 我想要的是单选,现在默认是多选。但我没找到什么地方可以设置只能单选。

我想要SelectedItemChanged事件。

“Checked属性为True的表示选中 ”是对的,但此时已经知道是那个子项了。我想得到的是直接获取当前选中的项,比如listView中的SelectedItem属性。有没有这个? --------------------编程问答-------------------- 默认没有单选,你要编程实现
在CheckedChanged里判断如果当前的MenuItem的Checked为true,则把其他所有为Checked=true都设置成Checked=false --------------------编程问答-------------------- 没有SelectedItem的属性,你要遍历一遍,把所有Checked都设成false --------------------编程问答-------------------- 嗯,我现在就是这么做的。不太方便。

或者说不用MenuStrip控件?有没有别的控件也可以实现菜单? --------------------编程问答-------------------- 简单版
    Private Sub MakeGroup(menuItems As IEnumerable(Of ToolStripMenuItem))
        Dim selectedItem As ToolStripMenuItem = Nothing
        For Each item In menuItems
            item.CheckOnClick = False
            If item.Checked Then selectedItem = item
            AddHandler item.Click, Sub(sender As Object, e As EventArgs)
                                       If selectedItem IsNot Nothing Then
                                           selectedItem.Checked = False
                                       End If
                                       selectedItem = sender
                                       selectedItem.Checked = True
                                   End Sub
        Next
    End Sub

    Private Sub MakeGroup(parentItem As ToolStripMenuItem)
        MakeGroup(parentItem.DropDownItems.OfType(Of ToolStripMenuItem))
    End Sub

复杂版
    Class MenuItemGroup
        Private _items As ToolStripMenuItem()
        Private _selectedItem As ToolStripMenuItem
        Public Event SelectedItemChanged As EventHandler
        Public ReadOnly Property Items As ToolStripMenuItem()
            Get
                Return _items
            End Get
        End Property
        Public ReadOnly Property SelectedItem As ToolStripMenuItem
            Get
                Return _selectedItem
            End Get
        End Property

        Public Sub New(menuItems As IEnumerable(Of ToolStripMenuItem))
            _items = menuItems.ToArray
            For Each item In _items
                item.CheckOnClick = False
                If item.Checked Then Me._selectedItem = item
                AddHandler item.Click, AddressOf ItemClick
            Next
        End Sub

        Public Sub New(parentItem As ToolStripMenuItem)
            Me.New(parentItem.DropDownItems.OfType(Of ToolStripMenuItem))
        End Sub

        Private Sub ItemClick(sender As Object, e As EventArgs)
            If sender Is Me.SelectedItem Then Return

            If Me.SelectedItem IsNot Nothing Then
                Me.SelectedItem.Checked = False
            End If
            Me._selectedItem = sender
            Me.SelectedItem.Checked = True

            RaiseEvent SelectedItemChanged(Me, EventArgs.Empty)
        End Sub
    End Class
End Class

使用
        '#1
        MakeGroup(选项ToolStripMenuItem)

        '#2
        Dim g = New MenuItemGroup(选项ToolStripMenuItem)
        AddHandler g.SelectedItemChanged, Sub(ss As Object, ee As EventArgs)
                                              Dim gObj = TryCast(ss, MenuItemGroup)
                                              Debug.WriteLine(gObj.SelectedItem.Text)
                                          End Sub
--------------------编程问答-------------------- 现在才看到,谢谢啦。我先看一下。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,