【问题标题】:.NET Windows Forms custom designer doesn't refresh the menu.NET Windows 窗体自定义设计器不刷新菜单
【发布时间】:2011-10-26 15:48:04
【问题描述】:

我为我的自定义控件创建了一个自定义设计器 (PannelloSfondoDesigner),一个背景面板 (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

成功了,我点击小箭头,出现上下文菜单:

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

但菜单描述没有更新或刷新(它应该显示“从父容器取消停靠”)。然后,如果我在控件外部单击以取消选择它,然后单击返回箭头以显示菜单,则会显示右侧菜单项:

如何刷新菜单项?! 谢谢。

【问题讨论】:

    标签: .net vb.net custom-controls windows-forms-designer


    【解决方案1】:

    你的动词可能混淆了吗?

    在您的代码中,当您进行 Dock-Filling 时,清除动词,然后添加 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
    

    更新:

    尝试更改您的设计器类以不清除集合,只需切换 Verb 集合的可见属性:

    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
    

    【讨论】:

    • 是的,但不幸的是,这并不能解决不刷新问题:(
    猜你喜欢
    • 2010-10-28
    • 2011-09-03
    • 1970-01-01
    • 2014-11-14
    • 2010-12-02
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多