Пользовательский конструктор .NET Windows Forms не обновляет меню

Я создал собственный дизайнер (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

Работает, нажимаю стрелочку, появляется контекстное меню:

контекстное меню элемента управления

Я нажимаю на пункт меню, событие запускается, элемент управления закреплен:

меню нажато

но описание меню не обновляется и не обновляется (оно должно показывать «Отстыковать от родительского контейнера»). Затем, если я щелкну за пределами элемента управления, чтобы отменить его выбор, а затем щелкну стрелку назад, чтобы отобразить меню, отобразится правильный элемент меню:

отображается текст в правом меню

Как обновить пункты меню?! Спасибо.


person vulkanino    schedule 26.10.2011    source источник


Ответы (1)


Может быть, вы перепутали глаголы?

В вашем коде, когда вы его заполняете, вы очищаете глаголы, а затем добавляете 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 вашей коллекции 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
person LarsTech    schedule 26.10.2011
comment
да, но, к сожалению, это не решает проблему отсутствия обновления :( - person vulkanino; 26.10.2011