.NET Windows窗体自定义设计不会刷新菜单 [英] .NET Windows Forms custom designer doesn't refresh the menu

查看:165
本文介绍了.NET Windows窗体自定义设计不会刷新菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为我的自定义控件创建自定义设计( 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆