6) 실습: 초점 제어기

이번에는 SetFocus 메서드를 이용하여 원하는 자동화 요소로 초점을 옮기는 프로그램을 작성합시다.

[그림 3.5] 초점 제어기 실행화면
[그림 3.5] 초점 제어기 실행화면
 초점 제어기를 만들기 전에 타겟 데모 응용 프로그램을 만들기로 합시다. 타겟 데모 응용 프로그램은 12개의 버튼이 있고 1개의 Label이 있습니다. 이 프로그램은 버튼에 초점이 오면 어느 버튼에 초점이 왔는지 Label에 표시하는 응용 프로그램입니다.

 

먼저 Windows Forms 응용 프로젝트를 생성하세요. 그리고 Form1에 버튼 12개와 Label 1개를 배치하세요. 그리고 Label의 이름 속성을 lb_focus로 설정합니다.

 

Fom1의 FormLoad 이벤트 핸들러를 추가하여 각 버튼에 초점이 왔을 때 lb_focus Label에 표시할 텍스트 속성을 변경하게 작성합시다.

버튼에 초점이 왔을 때 이벤트 핸들러에서는 이벤트를 발생한 원인인 sender를 Button 형식으로 참조 연산한 후에 lb_focus의 Text 속성을 버튼의 속성을 대입합니다.

 

[소스 3.4] Form1.cs

 

이제 초점 제어기를 작성합시다. Windows Forms 응용 프로젝트를 생성하시고 Form1의 화면 배치합니다.

 

[그림 3.6] 초점 제어기 Form1 화면 배치
[그림 3.6] 초점 제어기 Form1 화면 배치
번호 컨트롤 타입 컨트롤 명 설명
1 Button btn_refresh_pro 프로세스 목록 새로고침
2 ListBox lbox_pro 프로세스 목록을 보여주는 리스트 상자
3 ListBox lbox_ae 선택한 프로세스의 자동화 요소 목록을 보여주는 상자
4 Label lb_name 선택한 자동화 요소의 이름
5 Label lb_cname 선택한 자동화 요소의 지역화 컨트롤 타입
6 Label lb_rect 선택한 자동화 요소의 사각 영역

[표 3.5] Form1의 컨트롤

 

 

컨트롤 제어기의 동작 원리는 다음과 같습니다. 만약 프로세스 목록 새로고침 버튼을 누르면 프로세스 목록을 조사하여 메인 윈도우 핸들이 유효한 프로세스를 lbox_pro 목록에 추가합니다. 그리고 lbox_pro 목록의 선택 항목이 바뀔 때마다 선택한 프로세스의 메인 윈도우의 서브 트리에 있는 자동화 요소 중에 초점을 소유할 수 있는 버튼 컨트롤을 lbox_ae 목록에 추가합니다.

 

만약 lbox_ae 목록의 선택 항목이 바뀌면 선택한 자동화 요소의 정보를 각 Label에 표시하고 초점을 이동시킵니다.

 

이 프로그램에서는 효과적으로 프로세스와 자동화 요소를 ListBox에 추가하고 선택하였을 때 원하는 작업을 하기 위하여 WrapProcess와 WrapAE 클래스를 정의합시다.

 

 

[소스 3.5] WrapProcess.cs

 

 

 

[소스 3.6] WrapAE.cs

 

 

[소스 3.7] Form1.cs