2011-10-26 4 views
2

사용자 지정 컨트롤 인 배경 패널 (PannelloSfondo)에 대한 사용자 지정 디자이너 (PannelloSfondoDesigner)를 만들었습니다..NET Windows Forms 사용자 지정 디자이너가 메뉴를 새로 고치지 않습니다.

그것은 작동
<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-Filling 일 때 동사를 지우고 verbUndock이 아니라 verbDock을 추가하십시오.

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

관련 문제