2013-06-06 5 views
1

SplitContainer 인 Windows Form이 있습니다. 이 SplitContainer 다른 패널 있습니다.ArgumentException '자식'이이 부모의 자식 컨트롤이 아닙니다.

Panel1InputControl라는 사용자 지정 컨트롤과 Display라는 TextBox이 포함되어 있습니다. 나는 창문을 통과 할 수 있다면

int inputIndex = parent.Controls.GetChildIndex(InputControl); 
int displayIndex = parent.Controls.GetChildIndex(Display); 

나는이 코딩하고, 나는 확실하지 않았다 :

현재 표시되는 항목을 확인하려면, 나는 GetChildIndex Method에 서서 부모로 윈도우 폼을 사용 부모로 양식, 그래서 두 개의 인덱스보다 큰 -1 있다고 확인 이후에 중단 점을 넣어 : 첫 번째 정수 inputIndex에 값이 할당되기 전에, 나는이 함께 ArgumentException을 수상했다,

 if ((-1 < inputIndex) && (-1 < displayIndex)) { 

그러나 나를 내 노력의 결과 :

'자녀'는이 학부모의 자녀 통제가 아닙니다.

좋아,이 부모의 직접적인 자식 컨트롤이 아닌 것 같습니다.

한편 SplitContainer은 확실히 직접적인 자식 컨트롤입니다. 그렇다면 SplitContainer 컨트롤을 검색해야합니까?

기술적으로 Z- 인덱스를 원하는 컨트롤은 Panel1 컨트롤에 있습니다. 내 코드가이 코드를 못 생겨야 만한다는 것을 의미합니까?

int inputIndex = splitControl1.Panel1.Controls.GetChildIndex(InputControl); 
int displayIndex = splitControl1.Panel1.Controls.GetChildIndex(Display); 

이 내 두 (2) 컨트롤의 z 인덱스를 받고 매우 도움이되지 않는 방법처럼 보인다.

어떤 컨트롤이 맨 위에 있는지 추적하기 위해 내 자신의 코드를 작성하는 것 외에 다른 방법으로 이동하는 간단한 방법이 있습니까?

컨트롤이 직접 자식 컨트롤이든 부모의 다른 하위 클래스이든 상관없이 모든 컨트롤의 Z- 인덱스를 반환하는 Microsoft 메서드가 필요합니다. 대답은 먼저 이것을 아는 사람에게 주어집니다.

이것이 없으면 재귀 루프를 만들지 않고도 어떻게 쓸 수 있습니까? 기존의 Microsoft 방법이없는 경우 이는 수여 된 답변으로 사용됩니다.

재귀 루프가 필요한 경우 최상의 재귀 루프를 가리키며 가능하면 대답합니다.

답변

3

어때? 순서에 -depending이 개 버튼을 Form1, 1 텍스트 상자 및 SplitContainer가 : 예 : 당신이 SplitContainer가 또는 다른 컨테이너가있을 때

var inputIndex = InputControl.Parent.Controls.GetChildIndex(InputControl); 
var displayIndex = Display.Parent.Controls.GetChildIndex(Display); 
+1

당신이 정말로 그것을 짧은하려는 경우도 Control''의 확장 방법으로 추가 할 수 있습니다에게 도움이 될 것입니다 올바른 희망입니다. – Rotem

+0

젠장 마이클. 너는 그렇게 쉽게 보이게했다. 나는 이것에 대해서도 일하는 데 시간을 보냈다. – jp2code

1

그들은 부모 컨트롤의 컨트롤 (Form1의 예)를 기반으로의 tabindex 을받을 당신이 그들을 배치했거나 당신이 그들의 주문을 편집했다면 ...당신이이 개 패널이 SplitContainer가 내부 단추 1의의 tabindex는 3

이제 단추 2 1, 텍스트 상자 2, SplitContainer가 0이 될 것이다 (1, 2) (3) 자신의 적절한 인덱스 .... splitcontainer.panel1을받을 것의 tabindex를받을하는 , 0 및 splitcontainer.panel2는 3,1이 될 것입니다 ...... 이제는 각 컨트롤 내부에 을 넣습니다. 따라서 tabindex는 내부에있는 컨트롤의 수에 따라 3,0,0 또는 3,0,1이됩니다. 하지만 나는 그림을 얻는다고 생각한다. 자신의 인덱스가있는 "Form"과 같은 컨테이너를 생각해보십시오.

예 : int y = this.Controls.Find ("Display", true) .Single (x => x.Name == "Display"). TabIndex;

이렇게하면 컨트롤 이있는 splitcontainer의 패널 내부에 색인이 생성됩니다.

마이클 군터 응답이 조금

+0

안녕하세요, Terry와 StackOverflow에 오신 것을 환영합니다! 먼저 +1하겠습니다. 그러나 ** TabIndex **는 내가 필요로하는 것이 아닙니다. 나는 ** z-index **라고 불리는 것을 필요로했다. – jp2code

관련 문제