2016-12-15 4 views
0

OK - 여기 다시 C# newbie par excellence! C# TableLayoutPanel - 행 컨트롤 채우기 및 복제

내가 TableLayoutPanel 같이 있다고 가정 - 단일 행으로, 그리고 열 수 ... 내가 채울 것을 컨트롤 (레이블, 텍스트 상자 등)와 단일 행.

이제 복제본 번 'n'번 행을 만들고 각 컨트롤을 컨트롤의 배열 구성원으로 인덱싱하려고합니다. labelName [rowIndex] .Text = "새 텍스트"

  • 더 좋은 방법은 무엇입니까?

1] 많은 감사 -이 일을 나의 마지막 시도가 VB6와 함께 몇 년 전이었다!

답변

1

한 가지 방법은 List<List<Control>>을 만드는 것입니다. 그런 다음 tablelayoutpanel을 채우는 각 행은 List<Control>입니다. 그것은 다음과 같이 보일 것 3 열 가정 :

List<List<Control>> contrlList = new List<List<Control>>(); 
for (int row = 0; row < tableLayoutPanel1.RowCount; row++) 
{ 
    List<Control> rowControls = new List<Control>() 
     { 
      new DateTimePicker(), 
      new TextBox(), 
      new Label() 
     }; 
    for (int col = 0; col < tableLayoutPanel1.ColumnCount; col++) 
    { 
     tableLayoutPanel1.Controls.Add(rowControls[col], col, row); 
     contrlList.Add(rowControls); 
    } 
} 

일반적인 속성에 액세스하기 위해이 같이 호출합니다 :

contrlList[0][1].Text = "Whatever"; 

제어의 각 유형에 고유 한 특정 속성을 얻으려면, 당신은거야

((DateTimePicker)contrlList[0][0]).CalendarTitleBackColor = Color.AliceBlue; 

각 컨트롤 유형에서 사용할 수있는 이벤트 처리기를 만들려면 해당 유형 중 하나를 디자이너에로드하십시오. 머리글의 속성 창에서 번개 모양의 아이콘입니다. 이 유형의 컨트롤에 포함될 이벤트 목록이 나타납니다. 처리 할 이벤트를 두 번 클릭하십시오. 이렇게하면 코드에 스 니펫이 만들어집니다. 해당 컨트롤의 특정 인스턴스 (예 : comboBox1_SelectedIndexChanged 대신 ComboBox_SelectedIndexChanged)를 가리 키지 않도록 메소드의 이름을 변경합니다. 이제는 이벤트 핸들러를 추가하여 컨트롤이 해당 이벤트의 위치를 ​​알 수 있도록하는 간단한 작업입니다.

List<List<Control>> contrlList = new List<List<Control>>(); 
for (int row = 0; row < tableLayoutPanel1.RowCount; row++) 
{ 
    DateTimePicker newDTP = new DateTimePicker(); 
    ComboBox newCB = new ComboBox(); 
    newCB.SelectedIndexChanged += comboBox_SelectedIndexChanged; 
    Label newL = new Label(); 
    List<Control> rowControls = new List<Control>() 
     { 
      newDTP, 
      newCB, 
      newL 
     }; 
    for (int col = 0; col < tableLayoutPanel1.ColumnCount; col++) 
    { 
     tableLayoutPanel1.Controls.Add(rowControls[col], col, row); 
     contrlList.Add(rowControls); 
    } 
} 
+0

확인 - 그것에 대해 생각해 봅시다! 그것은 모두 의미가 있지만, 내가 예상했던 것보다 덜 직관적이거나 읽기 쉽지 않습니다. –

+0

그래, 나는 이것의 상대적 단순함을 좋아한다. 목록 컨트롤이 위에 제안되었다는 것을 알고 있지만 귀하의 게시물은 자신과 같은 dork에서 더 읽기 쉽습니다! –

+0

나는이 일을 할 수 있었지만 일반적으로 몇 가지 질문을 푸는 편견이있다 ...로드 된 컨트롤 중 일부는 comboBoxes라고 가정한다. 어떻게 그들을 채울 수 있는가? 변경 내용. –