请教关于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