본문 바로가기

프로그래밍언어/C#

C# 대화상자 및 고급컨트롤

대화상자/ 고급컨트롤


 shakeJ 

 

1.1 대화상자

 

대화상자란!?

사용자와 대화를 담당하는 작은 폼으로 설정상태를 보고, 사용자의 지시를 받아들이는 것.

사용자와 통신하는 장치는 텍스트 박스, 체크 박스, 리스트 박스, 레이블 같은 컨트롤들이다. 하나의 컨트롤로는 단일정보만 다룰 수 있기에 여러 개의 컨트롤이 모여야 복잡한 정보를 다룰 수 있고 이를 대화상자라고 한다.

 

대화상자를 위한 별도의 클래스는 따로 정의 되지 않기에 폼을 대화상자 형태로 만들어야 된다.

폼 중에 크기 조정이 안되고, 차일드 컨트롤을 담고 있으며 잠시 열렸다 닫히는 것들을 대화상자라고 부른다.

대화상자는 모달형과 모델리스 형으로 나눌 수 있는데,

모달형 : 대화상자를 닫기 전에 다른 작업을 진행이 불가능(비주얼스튜디오-새프로젝트 창등)

모델리스형 : 열린채로 다른 작업이 진행 가능한

 

(+ 차일드 컨트롤?

"모든 윈도우들이 차일드(Child) 윈도우가 될 수있다!" 결국 "윈도우위에 윈도우를 윈도우 밑에 윈도우를 붙일수 있다" 이것은 윈도우 프로그램의 기본입니다. 차일드 윈도우는 정의를 하자면 WinMain에서 만들어진 기본윈도우 안에 새로운 윈도우를 만들 때 이것이 차일드 윈도우인것입니다.

http://blog.naver.com/san008?Redirect=Log&logNo=40015200872 )

 

1.2 Dialog Result

 

ShowDialog 메서드는 대화상자를 띄우기도 하지만 대화상자의 실행결과를 Dialog Result 타입의 열거형으로 리턴하기도 한다. 대화상자에서 호출원으로 어떤 결과를 보고할 때 이 리턴값이 사용된다.

 

단순한 소개시에는 리턴 값이 의미가 없지만, 메시지 상자를 통해 질문하거나 선택사항이 있는 경우는 사용자가 입력한 값을 알아야 하기 때문에 리턴 값을 점검해야 한다.

 

 

1.3 정보의 교환

대화는 양방향으로 정보를 교환하는 것이다.

사용자는 대화상자를 통해 명령이나 정보를 입력하기도하지만, 대화상자를 통해 지금의 프로그램 상태를 보고받는다. 대화상자로 입출력을 동시에 수행하려면, 대화상자가 열리기 전에 현재상태를 컨트롤에 출력하고 대화상자가 닫힌 후에도 편집한 값을 읽어 들여 적용해야 한다 .

 

1.4 유효성 점검

사용자는 부정확한 존재라 실수 할 수도 있으며 잘못된 값을 입력 할 수도 있다. 이에 프로그래머는 사용자의 실수가 존재하더라도 잘못된 값을 입력받으면 새로운 값을 입력하도록 요구하여야 한다.

사용자가 입력한 값이 유효한지 알아보는 것이 이 유효성 검사이다. 이를 방어적 프로그래밍 기법이라고 하며, 안정성을 높이기 위해서는 어떠한 값을 입력 받아도 제대로 동작할 수 있도록 대비해야만 한다.

확인 버튼을 누를 때 한꺼번에 점검하는 것이 가장 보편적이다. 확인 버튼을 누르기 전에는 아직 사용자가 더 편집할 수도 있기 때문이다.

 

1.5 모델리스 대화상자

모델리스 대화상자는 모달형과는 달리 열어놓은 채로 계속 쓸 수 있는 대화상자이다. 대화상자를 닫지 않고도 메인 폼을 움직이거나 조작할 수 있으며 옵션 조정이 필요할 때마다 이를 참조 할 수 있다.

 

모달에 비해 편리 할 것 같지만 복잡하기에 프로그래밍 하기에도 많이 복잡하다. 또 메인윈도우와 함께 화면에 존재함으로써 번잡스럽기도 하다.

 

 

O 공통대화상자

 

2.1 파일열기

 

공통대화상자란 운영체제가 미리 제공하는 대화상자이다.

파일을 선택하는 등의 대화상자이며, 직접만들기에는 매우 복잡하므로 운영체제가 제공하는 것을 불러쓰면 된다.

파일 열기, 파일 저장 대화상자는 FileDialog 라는 추상 클래스로부터 파생된 OpenFileDialog, SaveFileDialog 클래스로 표현한다. 두 대화상자는 모양이나 기능상의 많은 특성을 공유하며 대부분의 기능을 FileDialog로부터 상속받는다. 다음은 FileDialog 클래스의 주요 프로퍼티이다. 따라서 이 프로퍼티들은 파일 열기나 파일 저장 대화상자에 공통적으로 적용된다.

 

파일 열기 대화상자는 다음 프로퍼티를 추가로 가진다.

프로퍼티

타입

설명

MultiSelect

bool 

복수 개의 파일을 선택할 수 있는지를 지정한다.

ReadOnlyChecked

bool 

읽기전용 체크 박스가 선택되어 있는지를 표시한다.

ShowReadOnly

bool

일기전용 체크 박스를 표시할 것인가를 지정한다.

파일 저장 대화상자는 다음 프로퍼티를 추가로 가진다.

프로퍼티

타입

설명

CreatePrompt

Bool

존재하지 않는 파일을 선택했을때 이 파일을 만들 것인지를 사용자에게 질문한다. 디폴트는 false 인데 이 경우 질문 없이 파일을 만든다.

OverwritePrompt

Bool

이미 존재하는 파일을 지정했을때 덮어도 되는지를 사용자에게 질문한다. 이 값이 false이면 질문 없이 파일을 새로 만든다. 디폴트는 true 이다.

 

* 예 제 (파일 열기 대화상자를 사용하는 예제 – 파일명 : OpenFile )


2.2 폴더 선택 대화상자

파일 열기 대화상자는 파일만 선택할 수 있으며 폴더는 선택할 수 없다. 폴더도 목록에 나오기는 하지만 어디까지나 폴더 안의 파일을 위한 진입점의 역할을 할 뿐이어서 폴더를 더블클릭하면 안으로 들어가버린다. 그래서 파일열기 대화상자로는 폴더를 선택할 수 없고 별도로 제공되는 폴더 선택 대화상자를 사용해야 한다. 이 대화상자에는 파일은 빼고 오로지 폴더의 목록만 나타난다. 흔히 설치경로를 물을 떄 이 대화상자를 볼 수 있다.

닷넷에서는 편의상 공통 대화상자의 일종으로 분류하고 있으며 CommonDilalog로부터 파생된다.

프로퍼티

타입

설명

Description

String

대화상자 위쪽의 설명 텍스트이다. 어떤 폴더를 선택하라는 간단한 안내문을 표시할 수 있다.

RootFolder

SpecialFolder

검색을 시작할 루트 폴더를 지정한다. 디폴트는 Desktop이므로 바탕화면 아래의 모든 폴더를 검색할 수 있다.

SelectedPath

String

사용자가 선택한 경로이다.

ShowNewFolderButton

Bool

새 폴더 버튼을 표시한다. 이 버튼이 있으면 폴더를 선택하는 중에 사용자가 새로운 폴더를 만들 수도 있다.

 

2.3 색상 및 폰트

색상을 입력 받을 때는 ColorDialog클래스를 사용한다. 색상은 R.G.B세 정수 값의 조합으로 입력할 수 있지만 정수만으로는 실제 색상을 유추하기 어려운데 색상 선택 대화상자를 사용하면 직접 보면서 선택할 수 있어 편리하다.

프로퍼티

타입

설명

AllowFullOpen

Bool

사용자 정의 색상을 선택할 수 있는지를 지정한다. 이 프로퍼티가 true이면 대화상자를 더 크게 펼쳐 직접 색상을 선택할 수 있다.

AnyColor

Bool

사용 가능한 색이 모두 표시되는지를 지정한다.

Color

Colo

사용자가 선택한 색상이다.

CustomColors

Int[ ]

사용자가 정의한 색상의 배열이다.

FullOpen

Bool

대화상자가 열릴 때 사용자 정의색을 선택하는 부분이 보이는지를 지정한다.

Options

Int

닷넷 라이브러리에서 내부적을 사용하며 코드에서는 사용하지 않는다. Win32 의 플래그에 해당한다.

ShowHelp

Bool

도움말 버튼을 표시할 것인가를 지정한다.

SolidColorOnly

Bool

단색만 선택할 수 있는지를 지정한다. 이 프로퍼티가 false이면 256색상 이하의 모드에서 혼합색을 선택할 수 있다.

 

ShowDialog 메서드로 대화상자를 호출한 후 Color 프로퍼티를 읽으면 사용자가 어떤 색상을 선택했는지를 알 수 있다. 평소에 대화상자는 기본색만 보이지만 펼치면 사용자가 직접 색을 선택할 수 있도록 확장된다. FullOpen 프로퍼티를 true로 지정하면 처음부터 펼친 상태로 열린다.

글꼴을 선택할 때는 FontDialog클래스를 사용한다. 글꼴도 선택해야 하는 정보가 많아서 직접입력받기는 까다로운데 공통 대화상자를 사용하면 글꼴 이름과 효과까지 보면서 선택할 수 있다.

프로퍼티

타입

설명

AllowScriptChange

Bool

스크립트 콤보 박스의 문자 집합을 변경할 수 있는지를 지정한다.

AllowSimulation

Bool

글꼴 시뮬레이션을 사용할 것인가를 지정한다.

AllowVectorFonts

Bool

벡터 폰트를 선택할 것인가를 지정한다.

AllowVerticalFonts

Bool

세로 방향 글꼴을 선택할 것인가를 지정한다. 일반적으로는 한글글꼴에는 세로방향 폰트를 잘 쓰지 않으므로 선택하지 않않는 것 좋다. 디폴트는 true이다.

Color

Color

선택한 글꼴의 색상이다.

FixedPitchOnly

Bool

고정 폭 글꼴만 선택할 수 있는지를 지정한다.

Font

Font

사용자가 선택한 글꼴이다.

FontMustExist

Bool

존재하지 않는 글꼴이나 스타일을 선택하면 오류 대화상자를 표시한다.

MaxSize

Int

선택할 수 있는 최대 크기

MinSize

Int

선택할 수 있는 최소 크기

ScriptsOnly

Bool

ANSI뿐만 아니라 비OEM글꼴도 선택할 수 있다.

ShowApply

Bool

적용 버튼을 보일것인가를 지정한다.

ShowApply

Bool

색상을 선택할 수 있는 컨트롤을 표시할 것인가를 지정한다. 색상은 글꼴과 직접적인 연관이 없기 때문에 디폴트 값은 false 이다.

ShowColor

Bool

색상을 선택할 수 있는 컨트롤을 표시할 것인가를 지정한다. 색상은 글꼴과 직접적인 연관이 없기 때문에 디폴트 값은 false이다.

ShowEffects

Bool

취소선, 밑줄 등을 선택할 수 있는 체크 박스의 표시 여부를 지정한다.

ShowHelp

Bool

도움말 버튼을 표시할 것인가를 지정한다.

 

 

고급컨트롤

O 고급컨트롤

1.1 프로그래스바

프로그래스바는 작업 진행 상태를 막대그래프 형식으로 표현한다.

설치 작업이나 장시간의 복잡한 계산인 경우 이 프로그래스바로 진행상태를 표시하는 것이 사용자들에게 편리하다.

Minimum, Maximim, 프로퍼티로 지정 현재 작업 진행 정도는 value 프로퍼티로 표현한다. 디폴드 범위는 0~100으로 되어있으므로 진행상태를 백분율로 표시한다면 그대로 사용하면 된다.

 

Style프로퍼티는 막대그래프의 모양을 지정한다. Marquee스타일은 진행정도를 보여주지는 않고 좌에서 우로 작은 막대를 움직이면서 현재 진행형이라는 것으 표시한다.

1.2 업다운

업다운은 텍스트 박스에 스핀버튼이 결합된 컨트롤이다. 작업 속도를 향상시키기 위해 사용하며, 입력받는 값의 종류에 따라 뉴메릭 업다운과 도메인 업다운으로 나뉜다.

NemericUpdown은 정수값을 받고 DomainUpdown은 문자열 목록중 하나를 선택한다. 목록이기에 선택 가능한 항목들을 미리 입력해 둔다.

 

1.3 트랙바

트랙바는 볼륨이나 크기, 확대 등 정확도 보다는 빠르게 선택해야 하는 값들을 마우스로 신속하게 입력 받을 때 사용한다. 즉, 볼륨 처럼 정확한 수치 값보다는 대충 어느 정도의 적당한 값을 빠르게 선택할 때 사용 하는 것이 트랙바이다.

(EX?)

1.4 DTP(DateTimePicer)

뜻그대로 날짜, 시간을 입력 받는다. 날짜는 년, 월에 범위가 달라져 규칙이 복잡하며 셋다 정수이므로 텍스트 박스로 입력 받는것도 가능하긴하지만, 복잡한 규칙들을 일일이 고려해서 정확한 날짜를 받기는 쉽지가 않다.

 

1.5 툴팁

툴팁은 마우스가 있는 위치에 대한 짧은 도움말을 출력하는 노란색의 조그만 팝업창인데 주로 툴바의 버튼이나 폼 위의 컨트롤에 대한 도움을 제공한다.

 

1.6 이미지 리스트

이는 이미지의 배열로 생각하면 쉽다. 순서값만으로 한 컴포넌트에서 원하는 이미지를 지정하여 사용한다. 이를 배열하는 방법은 동일 크기와 동일 색상의 이미지들을 관리한다. ImageSize 프로퍼티는 이미지 하나의 크기이며 colorDepth는 이미지의 색상 수이다.

O리스트뷰

2.1 리스트뷰의 데이터

리스트 뷰 컨트롤은 목록을 표시한다.

리스트 박스(1차원) 문자열 목록만표시가능

리스트 뷰 (2차원) 도표를 구현 가능

 

항목에 이미지를 같이 출력 할 수도 있고, 다양한 보기 옵션들도 지원한다.