2009-08-29 6 views
19

WinForms에 UI 나 컨테이너를 추가하면 나중에 추가 된 구성 요소가 이전에 추가 된 구성 요소에 추가되므로 상위 계층에 있다고 말할 수 있습니다.WinForm UI 구성 요소 레이어 순서

구성 요소를 추가 한 후 레이어 순서 또는 구성 요소 순서를 변경하는 방법은 무엇입니까?

답변

27

코드를 또는 디자이너에서 동적으로 구성 요소를로드 할 때도 마찬가지입니까? 디자이너에있는 경우 형식 -> 순서 -> 뒤로 보내기형식 -> 순서 -> 가져 오기 명령을 사용할 수 있습니다. 뒤로 보내기앞으로 가져 오기은 컨트롤을 마우스 오른쪽 단추로 클릭 할 때 컨텍스트 메뉴에서 사용할 수 있으며 양식 디자이너에서 작업 할 때 자동으로 나타나야하는 "레이아웃"도구 모음에서도 사용할 수 있습니다.

4

Z-Order으로 게임 해 보셨습니까?

참조 : Control.SentToBack 메서드 - 대부분의 Winform 컨트롤은이를 지원해야합니다.

30

두 개 이상의 컨트롤을 같은 위치에 배치하면 하나는 위쪽으로 끝나고 다른 하나는 아래쪽으로 끝납니다. 일반적으로 앵커 링 및 도킹 기능을 잘못 사용하는 등 사소한 실수가 발생합니다 어떤 경우에는 특정 효과에 대해 컨트롤을 겹칠 수 있습니다.

컨트롤이 겹쳐지면 컨트롤이 위에서 끝나는지를 결정하는 z- 인덱스입니다. 기본적으로 모든 컨트롤은 고유 한 번호가 매겨진 레이어에 있습니다. Z- 인덱스 레이어 1이있는 컨트롤은 z-index 레이어 2가 겹칠 경우이 인덱스를 사용합니다. 일반적으로 컨트롤 그룹의 Z- 인덱스는 컨트롤을 추가하는 순서에 따라 결정되므로 마지막으로 추가하는 컨트롤은 항상 최상위 레이어에 있습니다 (z- 인덱스 0).

그러나 이러한 옵션은 변경할 수 있습니다.

컨트롤의 z- 인덱스를 결정하거나 설정하려면 컨트롤 컬렉션의 GetChildIndex()SetChildIndex() 메서드를 사용할 수 있습니다. 컨트롤을 Z- 인덱스의 세 번째 레이어로 이동하는 예제가 있습니다.

Controls.SetChildIndex(ctrl, 2); 

일반적으로, 당신은 발견 세분화 control.Instead의이 종류를 필요가 없습니다, 당신은 단지 Z- 인덱스의 뒷면에 제어 (가장 아래 층) 떨어 뜨리거나 가지고 싶어합니다 컨트롤을 마우스 오른쪽 단추로 클릭하고 가져 오기 또는 뒤로 보내기를 선택하여 디자인 타임에이 기능을 수행 할 수 있습니다. 또한 Control.BringToFront() 또는 Control.SendToBack() 메서드를 사용하여 프로그래밍 방식으로 동일한 작업을 수행 할 수도 있습니다.

ctrl.BringToFront(); // This is equivalent to Controls.SetChildIndex(ctrl,0); 
+0

도움이되었습니다. 또한 GetChildIndex가 런타임에 컨트롤이 맨 위에 있는지 파악했습니다. 감사합니다. . –

11

디자이너보기에서 "문서 개요"패널을 열어 현재 양식/컨트롤의 트리 구조를보고 구성 요소를 "위로"및 "아래로"드래그하여 전면 및 후면으로 가져올 수 있습니다 뒤, 또한 컨테이너 안팎으로

+1

보기> 다른 윈도우> DocumentOutline 또는 바로 가기 키 사용 Ctrl + W, U –