일정 수 이상의 컨트롤들을 배치 하거나, 값을 넣거나 할 경우 배열로 선언해서 처리하면, 조금이나마 보기도 좋고, 값을 넣기도 편하다
우선 아래와 같이 전역 변수를 먼저 선언한다.
public TextBox[] txtBox; // 컨트롤 배열로 사용할 TextBox 전역변수 선언
public const int txtBox_num = 10; // 생성할 텍스트 박스 갯수 설정
실제로 TextBox를 생성하는 함수를 아래와 같이 코딩한다.
private void create__txtBox()
{
Int32 idx;
txtBox = new TextBox[txtBox_num];
for (idx = 0; idx < txtBox.Length; idx++)
{
// 새 인스턴스 생성
txtBox[idx] = new TextBox();
// 기본옵션 설정
txtBox[idx].Name = "txt" + idx.ToString("00");
txtBox[idx].Text = "";
txtBox[idx].Width = 32;
txtBox[idx].Height = 21;
txtBox[idx].Tag = idx.ToString();
// 이미 생성되어 있는 그룹박스 각각에 TextBox를 10개씩 생성하면서 위치까지 지정함.
if(idx < 10)
{
groupBox1.Controls.Add(txtBox[idx]);
if (idx == 0)
{
set_Position__txtBox(txtBox[idx], 10, 20, 200);
}
else
{
set_Position__txtBox(txtBox[idx], 10, txtBox[idx - 1].Top + 27, 200);
}
}
else
{
groupBox2.Controls.Add(txtBox[idx]);
if (idx == 10)
{
set_Position__txtBox(txtBox[idx], 10, 20, 200);
}
else
{
set_Position__txtBox(txtBox[idx], 10, txtBox[idx - 1].Top + 27, 200);
}
}
txtBox[idx].KeyUp += txtBoxEvent__KeyUp; //KeyUp Event 등록
}
}
키 입력에 해당되는 Event 함수는 아래와 같이 Form1_KeyPress 라는 함수를 만들면 된다.
public void txtBoxEvent__KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// 이벤트가 발생한 컨트롤의 핸들 얻기
TextBox h_txtBox = (TextBox)sender;
// 컨트롤 번호 얻기
int ctrl_num = Convert.ToInt32(h_txtBox.Tag);
// 마지막 박스에서는 다음으로 이동하지 않는다. (오류방지)
if (ctrl_num < txtBox_num - 1)
{
txtBox[ctrl_num + 1].Focus();
}
}
}
코드로 생성되는 TextBox는 모두 위치를 지정해줘야 하므로, 아래와 같이 코딩하면 된다.
private void set_Position__txtBox(TextBox txtBox, int Left, int Top, int Width)
{
txtBox.Left = Left;
txtBox.Top = Top;
txtBox.Width = Width;
}
생성된 모든 컨트롤들 중에서 TextBox의 이름만 가져 오는 함수는 아래와 같이 만들면 된다.
private void get__ctrl_name__txtBox(Control ctrl)
{
// 대상 컨트롤의 하위에 있는 모든 컨트롤을 대상으로 스캔한다.
foreach (Control tmpCtrl in ctrl.Controls)
{
// 재귀호출 : 컨트롤이 또 다른 컨트롤을 품고 있으면 하위의 끝까지 스캔한다.
if (tmpCtrl.Controls.Count > 0)
{
get__ctrl_name__txtBox(tmpCtrl);
}
// 현재 스캔중인 컨트롤이 TextBox 형식이면...
if (tmpCtrl is TextBox)
{
TextBox txtBox = (TextBox)tmpCtrl; // TextBox 으로 형 변환 한다.
txtLog.AppendText(txtBox.Name.ToString() + "\n"); // 현재 컨트롤 이름 Log 추가
}
}
}
'프로그래밍 언어 > C#' 카테고리의 다른 글
Control Name으로 속성을 변경하고자 하는 경우 (0) | 2019.08.12 |
---|---|
함수명을 String으로 호출하기 (0) | 2019.08.12 |
ListBox, ListView, TextBox에서 항상 포커스를 제일 아래로 자동 옮기기 (0) | 2019.07.19 |
문자열을 숫자로 변환하는 방법 (0) | 2015.06.27 |
Registry Key 만드는 방법 (0) | 2015.06.27 |