0

Panel에서 파생 된 사용자 지정 컨트롤이 있습니다.디자이너에서 그림자 속성을 설정하지 않았습니다.

내가 (컨트롤이 기본적으로 윈폼의 확장이다)을 조정해야하기 때문에이 크기 속성을 미행하고 다음으로 IsExpanded 속성에 따라 값

Private DesiredSize As Size 
Public Shadows Property Size As Size 
    Get 
     Return DesiredSize 
    End Get 
    Set(value As Size) 
     DesiredSize = value 
     AdjustHeight() 
    End Set 
End Property 

AdjustHeight() 더 많거나 적은 세트의 기본 크기

Public Property CollapsedWidth As Integer 
    Private Sub AdjustHeight() 
     If IsExpanded Then 
      MyBase.Size = DesiredSize 
     Else 
      Dim newh As Integer = 15 
      Dim neww As Integer 
      If CollapsedWidth > 0 Then 
       neww = CollapsedWidth 
      Else 
       neww = DesiredSize.Width 
      End If 
      MyBase.Size = New Size(neww, newh) 
     End If 
    End Sub 

생성자에서 DesiredSize = MyBase.Size으로 DesiredSize를 초기화합니다.

잘 작동하지만 Visual Studio Designer에 문제가 있습니다. 컨트롤의 크기를 조정할 때마다 Size 속성이 업데이트되지 않습니다. 디자인 타임에 폼에 대한 컨트롤은 크기가 조정되지만 일단 어플리케이션을 시작하면 디자인 타임뿐만 아니라 런타임에 초기 크기로 되돌아갑니다.

Designer에서 Size 속성을 실제로 처리하는 방법은 무엇입니까? 크기 속성을 적용하기 위해 Shadows 속성에 어떤 종류의 속성을 추가해야 할 필요가 있을까요?

VB.NET과 C# 모두에 대한 답변이 매우 만족 스럽습니다.

편집 : 나는 그것이 이와 같은 경우에 도움이 될 수 있지만, 내가 경험하고있는 행동에 대해 아무 것도 변경하지 않는 것을 읽을 수 있기 때문에 나는 재산에 <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> 태그를 추가하는 시도
.

편집 2 :
나는 다른 경로를 복용하고 크기 속성을 그림자 피함으로써 문제를 해결. 그러나 나는 질문을 공개적으로 남겨 둘 것이다. 왜냐하면 위에 게시 된 접근법이 가능할지를 여전히 알고 싶기 때문이다. 이 모든 것을 치료한다으로

+0

속성을 섀도 잉하는 대신 SizeChanged 이벤트를 처리하는 것이 더 쉽습니다. –

답변

0

는 I는 Shadow 에드 속성은 폼 디자이너 읽을 수 기대하지 않을 것이다 그것은 마치 어디 Control - 당신의 클래스에 대한 지식이 없으며,이 섀도 잉 방법과 위험하다 - 당신은 새로운 구현을 제공하지만, 당신에 대해 아는 사람들, 즉 기본 클래스에 대해 알고있는 사람들 만이 기본 클래스의 구현을 얻을 것이다.

Control.Size property이 덮어 쓰기 가능했다면 (가상의, 원하는 경우), 일 수 있고, 그 것이 작동했을 것입니다.

+0

그건 내가 정말로 이해하지 못하는 것입니다. Size 속성의 그림자를 만들면 디자이너가 이전과 같은 크기의 속성이라고 생각하지 않습니까? 다른 기능을 통해 MyBase.Size 속성의 실제 설정을 다시 라우팅했기 때문에 코드가 작동합니다. – Jens

+0

베이스 타입의 포인터 (예 :'Control')를 사용하는지 아니면 모든 컨트롤에 리플렉션을 사용하는지에 따라 다릅니다. 나는 대부분의 것들에 대해'Control' 기본 클래스를 사용하고 이미 본 속성에 대해 반영한다고 가정합니다 * –