.NET Windows窗体自定义设计不会刷新菜单 [英] .NET Windows Forms custom designer doesn't refresh the menu
问题描述
我已经为我的自定义控件创建自定义设计( PannelloSfondoDesigner
),背景板(PannelloSfondo
I have created a custom designer (PannelloSfondoDesigner
) for my custom control, a background panel (PannelloSfondo
).
<Designer(GetType(PannelloSfondo.PannelloSfondoDesigner))>
Public Class PannelloSfondo
Inherits UserControl
Friend Class PannelloSfondoDesigner
Inherits ParentControlDesigner
Public Overrides Sub Initialize(ByVal component As IComponent)
MyBase.Initialize(component)
verbDock = New DesignerVerb("Dock to parent container", New EventHandler(AddressOf Me.OnDock))
verbUndock = New DesignerVerb("Undock from parent container", New EventHandler(AddressOf Me.OnUndock))
verbs = New DesignerVerbCollection()
If Me.Control.Dock = DockStyle.Fill Then
verbs.Add(verbUndock)
Else
verbs.Add(verbDock)
End If
End Sub
Public Overrides ReadOnly Property Verbs() As DesignerVerbCollection
Get
Return verbs
End Get
End Property
Private Sub OnDock(ByVal sender As Object, ByVal e As EventArgs)
'Dim verbo As DesignerVerb = DirectCast(sender, DesignerVerb)
verbs.Clear()
verbs.Add(verbDock)
Me.Control.Dock = DockStyle.Fill
End Sub
Private Sub OnUndock(ByVal sender As Object, ByVal e As EventArgs)
verbs.Clear()
verbs.Add(verbUndock)
Me.Control.Dock = DockStyle.None
End Sub
Public Overrides Function CanBeParentedTo(ByVal parentDesigner As IDesigner) As Boolean
Return True
End Function
Private verbs As DesignerVerbCollection = Nothing
Private verbDock As DesignerVerb
Private verbUndock As DesignerVerb
End Class
End Class
它的工作原理,我点击小箭头,在出现的上下文菜单:
It works, I click the little arrow, the context menu appears:
我点击菜单项,在事件被触发,控制停靠:
I click the menu item, the event is fired, the control is docked:
但菜单说明没有更新或刷新(它应该显示从父容器取消停靠)。然后,如果我点击控制之外以取消选择它,然后我点击后面的箭头以显示菜单,右键菜单项显示:
but the menu description is not updated or refreshed (it should show "Undock from parent container"). Then if I click outside the control to deselect it and then I click back on the arrow to show the menu, the right menu item is displayed:
我如何刷新菜单项? 谢谢你。
How do I refresh the menu items?! Thanks.
推荐答案
你可能有你的动词混了?
Do you possibly have your verbs mixed up?
在你的code,当你在码头,加油吧,你清楚的动词,然后加入verbDock,不verbUndock。
In your code, when you are Dock-Filling it, your clear the verbs, and then adding the verbDock, not verbUndock.
Private Sub OnDock(ByVal sender As Object, ByVal e As EventArgs)
'Dim verbo As DesignerVerb = DirectCast(sender, DesignerVerb)
verbs.Clear()
'Switch verbs:
'verbs.Add(verbDock)
verbs.Add(verbUndock)
Me.Control.Dock = DockStyle.Fill
End Sub
Private Sub OnUndock(ByVal sender As Object, ByVal e As EventArgs)
verbs.Clear()
'Switch verbs:
'verbs.Add(verbUndock)
verbs.Add(verbDock)
Me.Control.Dock = DockStyle.None
End Sub
更新:
试着改变你的设计师类不明确的集合,只需拨动你的动词集合的Visible属性:
Try changing your designer class to not clear the collection, just toggle the Visible properties of your Verb collection:
Public Overrides Sub Initialize(ByVal component As IComponent)
MyBase.Initialize(component)
verbDock = New DesignerVerb("Dock to parent container", New EventHandler(AddressOf Me.OnDock))
verbUndock = New DesignerVerb("Undock from parent container", New EventHandler(AddressOf Me.OnUndock))
verbs = New DesignerVerbCollection()
verbs.Add(verbDock)
verbs.Add(verbUndock)
If Me.Control.Dock = DockStyle.Fill Then
verbDock.Visible = False
Else
verbUndock.Visible = False
End If
End Sub
Private Sub OnDock(ByVal sender As Object, ByVal e As EventArgs)
Me.Control.Dock = DockStyle.Fill
verbUndock.Visible = True
verbDock.Visible = False
End Sub
Private Sub OnUndock(ByVal sender As Object, ByVal e As EventArgs)
Me.Control.Dock = DockStyle.None
verbDock.Visible = True
verbUndock.Visible = False
End Sub
这篇关于.NET Windows窗体自定义设计不会刷新菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!