2011-10-26 83 views
2

我为自定义控件(背景面板(PannelloSfondo))创建了自定义设计器(PannelloSfondoDesigner)。.NET Windows窗体自定义设计器不刷新菜单

<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 

它的工作原理,我点击小箭头,在出现的上下文菜单:

control's context menu

我点击菜单项,在事件被触发,该控件停靠:

menu clicked

但菜单描述没有更新或刷新(它应该显示“从父容器中取消”)。然后,如果我点击控制之外,取消选择它,然后我点击回到箭头以显示菜单,显示右键菜单项:

right menu text displayed

如何刷新菜单项? 谢谢。

回答

3

你可能会混淆你的动词吗?

在您的代码中,当您填充Dock时,清除动词,然后添加verbDock,而不是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属性:

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 
+0

是啊,但遗憾的是这并没有解决不刷新:( – vulkanino

+0

@vulkanino更新的代码。 – LarsTech

+0

它只是岩石!谢谢。 – vulkanino