2015. 2. 24. 15:52

텍스트 상자 라던가...


여튼 입력 항목이 많을 때에는 컨트롤 배열로 선언해서 다루면 여러모로 편리합니다. ^__^

가끔 써먹어야 하는데 기억이 가물가물 해서 정리를...

 


전역변수 선언

        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 에서 작성한 예제 소스 첨부


ControlArrayExample.rar




예제 실행 화면



Posted by 해비