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 해비
2015. 2. 20. 20:08

최근에 라즈베리파이2를 구매하게 되었습니다.


이것을 공유기로 사용하면 어떨까... 라는 궁금증에 실험을 한번 진행 해 보았습니다.




벤치비 사이트 이용하여 측정.

1. PC에서 직접 측정 시 속도




2. 라즈베리 파이2 를 거칠 경우의 속도




이어서 파이2 네트워크 통과 시 파이2에서 발생한 CPU 사용률 입니다.


예... 파이2는 쿼드코어 900 Mhz 입니다.


그.러.나...


어찌된 영문인지... 코어1만 풀로드 차고 나머지 코어는 띵가띵가 노는군요;;


라즈베리파이 2를 사서 공유기나 NAS 같은 네트워크 I/O 를 주 목적으로 사용하실분들은 참고 하세요~



[연결 설정한 경로 입니다]

인터넷 --> 파이2 이더넷(IN) -->USB to Ethernet(OUT) --> PC



일반 공유기의 CPU와 비교가 안될정도로 고성능임에도 성능하락이 발생하는 이유를 추측하자면...


1. USB 자체가 CPU에 부담을 주는걸로 아는데...

2. 라즈베리 파이2 에는 전용 이더넷 칩이 달려있지 않고 USB to Ethernet 으로 구현되었으며,

3. OUT 용으로 붙인 이터넷 역시 USB to Ethernet 이므로...

4. IN / OUT 트래픽 모두 USB 에서 처리하느라 CPU가 고생(?)이랴 ~



... 2, 3,4 번 코어가 띵가띵가 노는 현상은 조사를 좀 해봐야 할 듯 합니다.

찾으면 보충하도록하고... 여기 까지 줄입니다. ^__^





아래 참고용으로 하나더 추가합니다.

2007년 9월에 산 코어2듀오 T7300 노트북에 데비안 설치 후 진행하였습니다.

연결경로는 파이2와 동일하며, 파이2 대신 노트북이 위치합니다.


코어2듀오 T7300 CPU 노트북



노트북 네트워크 통과시 CPU 점유율


... 에, 뭐 3% 미만에서 여유롭게~ 놀고 있습니다 -_-;;




Posted by 해비