using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CSharp_ControlArray
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//컨트롤 이름으로 찾아서 컨트롤 배열 처럼 사용 하기...
//폼안에 컨트롤들 Panel 안에 있던 GroupBox 안에 있던 상관 없이 접근 가능
for (int iCount = 1; iCount <= 10; iCount++)
{
this.FindByName<Button >("Button" + iCount.ToString()).Text = "Test" + iCount.ToString();
this.FindByName<CheckBox>("CheckBox" + iCount.ToString()).Text = "Test" + iCount.ToString();
this.FindByName<Label>("Label" + iCount.ToString()).Text = "Test" + iCount.ToString();
}
//아래의 소스코드 처럼 Panel 안에 있는 컨트롤들을 찾아서 Text 를 바꾸는 예제
//계층적임.
int iSample = 0;
//각각 Panel GroupBox 안에 있는 컨트롤 접근
//foreach (Control ct in panel1.Controls)
//{
// CheckBox ch = ct as CheckBox;
// ch.Text = iSample.ToString();
// iSample += 1;
//}
//foreach (Control ct in groupBox1.Controls)
//{
// Label lb = ct as Label;
// lb.Text = iSample.ToString();
// iSample += 1;
//}
//폼 안에 컨트롤 접근 -> Panel 및 GroupBox 찾아서 그 안에 있는 컨트롤 접근
foreach (Control ct in this.Controls)
{
//타입이 Panel 이면...
if (ct.GetType().Name.ToLower() == "panel")
{
Panel pnl = ct as Panel;
foreach (Control ct1 in pnl.Controls)
{
CheckBox ch = ct1 as CheckBox;
ch.Text = iSample.ToString();
iSample += 1;
}
}
//타입이 GroupBox 이면...
else if (ct.GetType().Name.ToLower() == "groupbox")
{
GroupBox gb = ct as GroupBox;
foreach (Control ct2 in gb.Controls)
{
Label lb = ct2 as Label;
lb.Text = iSample.ToString();
iSample += 1;
}
}
//이 부분 어차피 접근이 안되는 부분...
else if (ct.GetType().Name.ToLower() == "label")
{
Label lb = ct as Label;
lb.Text = "123213213213213";
}
}
}
}
}
Panel 이나 GroupBox 에 있는 컨트롤도 접근이 가능 한 이유는 Form1.Designer.cs 파일을 열어 보게 되면