프로그래밍 기술/소프트웨어 접근성, UI 자동화

9. 접근성 평가 도구 만들기 - 16. ProjectInfoControl

언제나휴일 2017. 12. 12. 13:41
반응형

9.3.4 ProjectInfoControl


 

 이번에는 생성한 평가 프로젝트의 정보를 제공하는 ProjectInfoControl을 구현합시다.

 

[그림 9.13] ProcessInfoControl 배치

[그림 9.13] ProcessInfoControl 배치

  

번호

컨트롤 형식

컨트롤 이름

특이 사항

1

Label

lb_title

 

2

Label

lb_ui_cnt

 

3

Label

lb_noname_cnt

 

4

ListView

lv_control

View 속성을 Details로 설정

5

Button

btn_save

Visible 속성을 False로 설정

6

Button

btn_end

 

7

Button

btn_save_end

 

8

ListView

lv_accesskey

View 속성을 Details로 설정

9

ListView

lv_acceleratorkey

View 속성을 Details로 설정

10

FolderBrowserDialog

fbdlg

 

[ 9.4] ProcessInfoControl의 자식 컨트롤

 

 lv_control 컨트롤의 열 추가를 합니다. ch_ctrl_type ch_cnt를 추가합니다.

 lv_accesskey 컨트롤의 열 추가를 합니다. ch_ui_name ch_access를 추가합니다.

 lv_acceleratorkey 컨트롤에도 ch_ui_name2 ch_accelerator 열을 추가합니다.

 

 컨트롤의 생성자에는 평가 프로젝트를 입력 인자로 받습니다. 생성자에서는 인자로 받은 평가 프로젝트를 멤버 필드로 설정합니다.

AccEvalProject aeproject;

public ProjectInfoControl(AccEvalProject aeproject)

{

    InitializeComponent();

    this.aeproject = aeproject;

}

  

 로드 이벤트 핸들러를 추가합니다. 로드 이벤트 핸들러에서는 프로젝트 타이틀을 관련 레이블에 설정하고 UI 요소 개수 및 이름 없는 요소 개수를 관련 레이블에 설정합니다. 그리고 컨트롤 패턴 목록과 AccessKey, AcceleratorKey 목록을 분석하여 관련 리스트 뷰 컨트롤 목록에 추가하는 메서드를 호출합니다.

private void ProjectInfoControl_Load(object sender, EventArgs e)

{

   lb_title.Text = aeproject.Title;

   lb_ui_cnt.Text = aeproject.UICount.ToString();

   lb_noname_cnt.Text = aeproject.NonameCount.ToString();

   ParsingControlPattern();

   ParsingAccessKey();

   ParsingAcceleratorKey();

}

private void ParsingControlPattern()

{

    lv_control.Items.Clear();

    for (ENUM_CONTROL ctrl = 0; ctrl < ENUM_CONTROL.MAX_CONTROL; ctrl++)

    {

        int count = aeproject.GetControlPatternCount(ctrl);

        string[] name_count = new string[2];

        name_count[0] = ctrl.ToString();

        name_count[1] = count.ToString();

        lv_control.Items.Add(new ListViewItem(name_count));

    }

}

private void ParsingAccessKey()

{

    List<string[]> item_list = aeproject.GetAccessKeyItemList();

    lv_accesskey.Items.Clear();

    foreach (string[] item in item_list)

    {

        lv_accesskey.Items.Add(new ListViewItem(item));

    }

}

 

 

private void ParsingAcceleratorKey()

{

    List<string[]> item_list = aeproject.GetAcceleratorKeyItemList();

    lv_acceleratorkey.Items.Clear();

    foreach (string[] item in item_list)

    {

        lv_acceleratorkey.Items.Add(new ListViewItem(item));

    }

}

 

 btn_save 컨트롤의 클릭 이벤트 핸들러를 추가하고 핸들러에는 Save 메서드를 호출합니다. Save 메서드에서는 저장할 폴드를 선택하면 평가 프로젝트의 Save 메서드를 호출합니다.

private void btn_save_Click(object sender, EventArgs e)

{

    Save();

}

private bool Save()

{

    if (fbdlg.ShowDialog() == DialogResult.OK)

    {

        aeproject.Save(fbdlg.SelectedPath);

        return true

    }

    return false;

}

  

 btn_end 컨트롤의 클릭 이벤트 핸들러를 추가하고 EndProject 메서드를 호출합니다. 그리고 EndProject 메서드에서는 평가 프로젝트의 End 메서드 호출과 컨트롤의 Dispose 메서드를 호출합니다.

private void btn_end_Click(object sender, EventArgs e)

{

    EndProject();

}

private void EndProject()

{

    aeproject.End();

    this.Dispose();

}

 

 마지막으로 btn_save_end 클릭 이벤트 핸들러를 추가하여 Save 메서드와 EndProject 메서드를 호출합니다.

private void btn_save_end_Click(object sender, EventArgs e)

{

    if (Save())

    {

        EndProject();

    }

}

반응형