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

9. 접근성 평가 도구 만들기 -13. 접근성 평가 도우미 폼, 컨트롤 구현, EHHighlight

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

9. 3 접근성 평가 도우미 폼, 컨트롤 구현



 이제 접근성 평가 도우미의 폼과 컨트롤을 구현합시다.

 

 구현 순서는 프로그램 방식의 하이라이트를 보여주는 EHHighlight, 생성할 프로젝트 이름을 정하는 ProjectMakerControl, 프로세스를 선택하는 ProcessSelectForm, 프로젝트 생성 정보를 보여주는 ProjectInfoControl, 이미지 보기 Form, InvokePattern Form 순으로 작성한 후에 MainForm을 작성합시다. 실제 프로그래밍을 하는 순서는 이와 다르지만 분석하기 쉽게 하려고 순서를 이와 같이 할게요.

 

9.3.1 EHHighlight

 

 EHHighlight 개체는 원하는 사각 영역을 감싸는 하이라이트로 프로그램 방식의 초점을 표시하기 위함입니다.

 

 접근성 평가 도우미에서는 특정 UI 요소 주변을 감싸는 것이 필요한데 해당 UI 요소를 사용할 수 있게 하려고 상, , , 우에 경계선만 보이는 4개의 폼을 보여주는 형태로 만들 것입니다.

 

 먼저 EHHightlight의 상, , , 우에 경계선만 보이는 4개의 폼에 사용할 HighlightForm을 정의합시다.

 

 HighlightForm을 프로젝트에 추가한 후에 속성을 다음처럼 변경합니다.

 

속성명

속성값

속성명

속성값

AutoScaleMode

None

BackColor

Red

Enabled

False

FormBorderStyle

None

MaximizeBox

False

MinimizeBox

False

ShowIcon

False

ShowInTaskbar

False

Size

0,0

SizeGripStyle

Hide

StartPosition

Manual

TopMost

True

[ 9.1] HighlightForm 속성

   

 그리고 HighlightForm 개체 4개를 멤버로 하는 EHHightlight 클래스를 정의합니다. 단순히 둘러쌀 사각 영역을 설정하면 이에 맞게 상, , , HighlightForm 개체의 위치 정보를 계산하여 변경하는 것과 Visible 속성에 따라 보여주기, 숨기기를 하는 기능을 제공합니다.

 

using System.Drawing;
using System; 
 
namespace 예제_9_접근성_평가_도우미
{
    public class EHHighlight
    {
        Rectangle rect;
        HightlightForm leftform = null;
        HightlightForm topform = null;
        HightlightForm rightform = null;
        HightlightForm bottomform = null;
        int bordersize = 4;
        public Rectangle Rect
        {
            get{   return rect;     }
            set
            {
                rect = value;
                ChangeRect();
            }
        }
        public bool Visible
        {
            get{    return leftform.Visible;    }
            set{    ChangeVisible(value);      }
        }
        public EHHighlight()
        {
            leftform = new HightlightForm();
            topform = new HightlightForm();
            rightform = new HightlightForm();
            bottomform = new HightlightForm();
            Rect = new Rectangle(-100, -100, bordersize, bordersize);
        } 
        private delegate void ChangeVisibleDele(bool visible);
        private void ChangeVisible(bool visible)
        {
            if (leftform.InvokeRequired)
            {
                leftform.Invoke(new ChangeVisibleDele(ChangeVisible), 
                                        new object[] { visible });
            }
            else
            {
                leftform.Visible =  bottomform.Visible = visible;
                rightform.Visible = topform.Visible = visible; 
                leftform.Visible = visible;
            }
        }
        public void Close()
        {
            leftform.Close();
            rightform.Close();
            topform.Close();
            bottomform.Close();
        }
 
        delegate void ChangeRectDele();
        private void ChangeRect()
        {
            if (leftform.InvokeRequired)
            {
                leftform.Invoke(new ChangeRectDele(ChangeRect), null);
            }
            else
            {
                leftform.Left = rect.Left - bordersize;
                leftform.Top = rect.Top - bordersize;
                leftform.Width = bordersize;
                leftform.Height = rect.Height + 2 * bordersize; 
                rightform.Left = rect.Right;
                rightform.Top = leftform.Top;
                rightform.Width = leftform.Width;
                rightform.Height = leftform.Height; 
                topform.Left = rect.Left;
                topform.Top = leftform.Top;
                topform.Width = rect.Width;
                topform.Height = bordersize; 
                bottomform.Left = topform.Left;
                bottomform.Top = rect.Bottom;
                bottomform.Width = topform.Width;
                bottomform.Height = topform.Height;
            }
        }
    }
}

[소스 9.7] EHHighlight.cs

 

반응형