2013-08-23 1 views
1

C#에서 다음과 같은 컨트롤 배열을 사용하여 응용 프로그램을 작성하고 있습니다.tabcontrol의 컨트롤에 어떻게 액세스합니까?

먼저 splitcontainer가 들어있는 하위 폼이 있습니다.이 패널에는 두 개의 패널, 왼쪽에는 Panel1, 오른쪽에는 Panel2가 있습니다. Panel1에는 확인란과 텍스트 상자가 있습니다. Panel2에는 탭 컨트롤이 있습니다. 프로그래밍 방식으로 생성 될 때 각 탭에는 확인란과 텍스트 상자가 포함됩니다.

자식 폼의 맨 위에 저장을 클릭하면 Panel1의 모든 컨트롤의 모든 데이터가 올바르게 이진 파일에 저장됩니다. 그런 다음 저장 루틴은 탭 컨트롤의 각 탭을 반복하고 각 탭의 체크 상자와 텍스트 상자의 데이터를 저장해야합니다. 여기에 지금까지 무엇을 가지고 : ". 현재 컨텍스트에 존재하지 않는"

   foreach (TabPage tab in tabControl1.TabPages) 
      { 
       string Question = tbQuestion.Text(tabControl1.SelectedIndex); 
      } 

불행하게도, tbQuestion.Text이 오류 메시지가 있음을 나타내는 그 아래 위글 라인 끝 각 탭의 다른 모든 컨트롤에서도 마찬가지입니다. 각 탭의 컨트롤에 액세스하려면 어떻게해야합니까? 당신은 당신이 컨트롤의 쌍 항목을 추가 만들 때 당신은 다음

Dictionary<TextBox,Checkbox> questionsAndAnswers = new Dictionary<TextBox,CheckBox>(); 

같은 것을 할 수있는 프로그램을 만드는 잘 경우

foreach (TabPage tab in tabControl1.TabPages) 
{ 
    Control ctl = tp.Controls.Cast<Control>().Where(c=>c.Name=="tbQuestion").FirstOrDefault(); 

    string Question = ... ctl.Text; 
} 

답변

2

같은 뭔가를 시도 할 수 있습니다. 하나 더 가서 Dictionary<string,bool>을 사용할 수 있습니다. 또 다른 옵션은 반복을 모두 가져 와서 List<T>에 바인딩하는 것입니다. T은 QuestionAnswer를 추상화하는 클래스이며 프로그래밍 방식으로 바인딩을 설정하고로드 및 저장 코드는 간단한 코드 만 처리하면됩니다. 더 복잡한 것처럼 들립니다. ,하지만 당신은 그것과 함께 매우 연약한 코드의 엄청난 양을 제거 할 수 있습니다. 더 나은 여전히 ​​UserControl 노크 수 있으며 바람직하게 인터페이스를 통해이 모든 동작을 빌드하십시오.

어쨌든 교훈을 얻은 몇 가지 아이디어가 있습니다. 당신이 필요로하는

모든뿐만 아니라 일부 크기 조정 행동과 갑작스런

(CheckBox)Form.Controls[0].Controls[2].Controls[8]을 모두 얻을 수있는 객관식 질문에 대한 새로운 요구 사항 (단일 또는 다중 선택 등) 또는 현재 탭 내부 패널에 지나지 않는다 이해하기 어려울 정도로 파산했습니다 ...

0

:

+0

토니에게 감사드립니다. 나는 확실히리스트 아이디어를 시도해 볼 것입니다. 내가 필요한 것처럼 들린다. 여러 탭을 반복하는 것은 실제로해야 할 일보다 훨씬 많은 작업처럼 들립니다. 더 쉬운 방법이 있다면, 왜 안되죠? – user2272380