한 가지 방법은 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);
}
}
확인 - 그것에 대해 생각해 봅시다! 그것은 모두 의미가 있지만, 내가 예상했던 것보다 덜 직관적이거나 읽기 쉽지 않습니다. –
그래, 나는 이것의 상대적 단순함을 좋아한다. 목록 컨트롤이 위에 제안되었다는 것을 알고 있지만 귀하의 게시물은 자신과 같은 dork에서 더 읽기 쉽습니다! –
나는이 일을 할 수 있었지만 일반적으로 몇 가지 질문을 푸는 편견이있다 ...로드 된 컨트롤 중 일부는 comboBoxes라고 가정한다. 어떻게 그들을 채울 수 있는가? 변경 내용. –