텍스트 상자 라던가...
여튼 입력 항목이 많을 때에는 컨트롤 배열로 선언해서 다루면 여러모로 편리합니다. ^__^
가끔 써먹어야 하는데 기억이 가물가물 해서 정리를...
전역변수 선언
TextBox[] tBox; // 컨트롤 배열로 사용할 TextBox 전역변수 선언 const int ARR_TEXTBOX_COUNT = 20; // 생성할 텍스트 박스 갯수 설정 |
컨트롤 배열 생성, 기본 옵션 설정, 이벤트 연결
private void CreateTextBoxes() { tBox = new TextBox[ARR_TEXTBOX_COUNT]; for (int i = 0; i < tBox.Length; i++) { // 새 인스턴스 생성 tBox[i] = new TextBox(); // 기본옵션 설정 tBox[i].Name = "txt" + i.ToString(); // 텍스트상자에 이름을 부여한다. 예) txt1 tBox[i].Text = ""; tBox[i].Width = 32; tBox[i].Height = 21; tBox[i].Tag = i.ToString(); // 그룹박스에 텍스트상자 추가, 각 그룹박스당 10개씩 생성한다. if(i < 10) { groupBox1.Controls.Add(tBox[i]); } else { groupBox2.Controls.Add(tBox[i]); } // 이벤트 등록 tBox[i].KeyPress += Form1_KeyPress; } |
이벤트 처리
// 키눌림 이벤트 처리 void Form1_KeyPress(object sender, KeyPressEventArgs e) { // 엔터 키 입력 if(e.KeyChar == (char)13) { // 이벤트가 발생한 컨트롤의 핸들 얻기 TextBox hTextBox = (TextBox)sender; // 컨트롤 번호 얻기 int ctrlNum = Convert.ToInt32(hTextBox.Tag); // 마지막 박스에서는 다음으로 이동하지 않는다. (오류방지) if(ctrlNum < ARR_TEXTBOX_COUNT -1) { tBox[ctrlNum + 1].Focus(); } } } |
텍스트 상자 이름 한번에 가져오기
// 모든 텍스트 상자의 이름 가져오기!! private void getControlNames(Control control) { // 대상 control 의 하위에 있는 모든 컨트롤을 대상으로 스캔한다. foreach (Control tmpCtrl in control.Controls) { // 재귀호출 : 컨트롤이 또 다른 컨트롤을 품고 있으면 하위의 끝까지 스캔한다. if (tmpCtrl.Controls.Count > 0) getControlNames(tmpCtrl); // 현재 스캔중인 컨트롤이 TextBox 형식이면... if (tmpCtrl is TextBox) { TextBox textBox = (TextBox)tmpCtrl; // TextBox 으로 형 변환 한다. txtLog.AppendText(textBox.Name.ToString() + "\n"); // 현재 컨트롤 이름 Log 추가 } } } |
vs2013 에서 작성한 예제 소스 첨부
예제 실행 화면