[C#기초] 16. 대화상자
INDEX
대화상자
개요
- 사용자 인터페이스
종류
- 모달형
- 대화상자를 해결해야만 진행 가능
- 예시 : 메시지 박스
- 모델리스형
- 하나의 폼 안에 여러개의 윈도우를 띄울 수 있음
- 예시 : visual studio
- 공용 대화상자
- 미리 만들어놓은 대화상자
- 사용이 간편
모델리스와 모달형 차이점
모델리스형 | 모달형 |
---|---|
메인 폼의 기능 사용 가능 | 메인 폼의 기능 사용 불가능 |
Show() |
ShowDialog() |
일반적으로 멤버 변수로 선언 (지속적인 사용) | 일반적으로 지역 변수로 선언 (일회성 사용) |
모달형 대화상자
모달형 대화상자 폼 생성
모달형 대화상자 생성
- Form 생성 -> new 로 생성
Form2 Dlg = new Form2();
모달형 대화상자 화면 출력과 해제
-
출력
-
public DialogResult ShowDialog()
Dlg.ShowDialog()
-
해제
-
Dlg.Dispose()
모달형 대화상자 결과 점검
-
DialogResult 속성 변수에 값 설정
-
- (Abort, Cancel, Ignore, No, None, OK, Retry, Yes)
- DialogResult 열거형
메인 폼에서 모달형 대화상자 데이터 접근 방법
- public 변수 또는 속성은
Dispose()
가 호출되기 전에 메모리상에 존재하므로 접근 가능
메인폼과 모달형 대화상자 간의 데이터 전송
-
Owner 속성 사용
-
- Form.Owner
- pulbic Form Owner { get; set; }
- 클래스 참조 역할
- 클래스 참조를 통한 데이터 전송
모달형 대화상자 예시 코드
-
열기 메뉴 버튼 눌렀을 시 폼 띄우기 예시
private void 열기ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 Dlg = new Form2(); //Form2 객체 생성 Dlg.ShowDialog(); //Form2 띄우기 Dlg.Dispose(); //Form2 제거 }
모달형 대화상자 값 전달 예시
-
Form2 -> Form1 마우스 좌표 값 전달
-
Form1
private void button1_Click(object sender, EventArgs e) { Form2 Dlg = new Form2(); //Form2 객체 생성 if (Dlg.ShowDialog() == DialogResult.Yes) //Form2의 DialogResult 속성 변수 참조 { MessageBox.Show("정상종료 " + Dlg.mp.ToString()); //Form2의 public 변수 참조 } Dlg.Dispose(); //Form2 제거 }
-
Form2
-
-
public Point mp; //보낼 데이터 public으로 선언
private void Form2_FormClosing(object sender, FormClosingEventArgs e) { mp = Cursor.Position; DialogResult = DialogResult.Yes; // DialogResult 속성 변수 설정 }
-
Owner 통하여 값 전달 예시
-
Form1 -> Form2 문자열 전달
-
Form1
public string Message; private void button1_Click(object sender, EventArgs e) { Form2 Dlg = new Form2(); //Form2 객체 생성 Dlg.Owner = this; //Form2의 객체 Dlg의 Owner에 Form1(this) 값 전달 Message = "전달할 메시지"; Dlg.ShowDialog(); //Form2띄우기 Dlg.Dispose(); //Form2 제거 }
-
Form2
string Message; private void Form2_Load(object sender, EventArgs e) { Form1 MainForm = (Form1)Owner; //Form1의 객체 생성 Message = MainForm.Message; //Form1으로부터 문자열 참조 MessageBox.Show(Message-); }
-
Owner 응용
-
Form1 -> Form2로 문자열 전달
-
Form1
-
public string Message; private void button1_Click(object sender, EventArgs e) { Form2 Dlg = new Form2(); Dlg.tempForm1 = this; Message = "전달할 메시지"; Dlg.ShowDialog(); Dlg.Dispose(); }
-
Form2
-
public Form1 temp; private void Form2_Load(object sender, EventArgs e) { MessageBox.Show(tempForm1.Message); }
모델리스형 대화상자
모델리스형 대화상자
일반적인 것들은 모달형 대화상자와 같지만
Dlg.ShowDialog() 가 아닌 Dlg.Show()를 통해 폼을 만든다.
모델리서형 대화상자 출력 예시
Form2 Dlg = null; private void button1_Click(object sender, EventArgs e) { if(Dlg == null) //대화상자를 하나만 만들기 위한 if문 { Dlg = new Form2(); Dlg.Show(); } }
공용대화상자
공용대화상자 쓰임새 예시
- 파일 열기, 파일 저장, 폰트, 색상, 인쇄 등..
OpenFileDailog와 SaveFileDialog class
- 도구 상자 -> 컨트롤의 형태
- 파일 Stream 제공 (선택적 사용)
SaveFileDialog
-
도구상자 -> 컨트롤 선택을 통해 생성
-
속성창을 이용하거나 코드를 이용하여 속성 설정
-
결과는 ShowDialog()의 열거형 리턴값으로 판단
-
파일 저장
-
- SaveFileDailog.OpenFile() -> Stream 제공 (또는 Stream선언하여 사용)
-
많이 쓰이는 속성
-
-
DefaultExt
-
- 기본 확장자
-
FileName
-
- 경로가 포함된 파일명
-
SaveFileName
-
- 파일경로가 포함되지 않은 파일명 + 확장자
-
FileNames
-
- 다중 선택 파일명
-
Filter
-
-
파일 필터 “파일명(확장자) *.확장자……”; - 읽고자 하는 확장자 필터링
-
-
FilterIndex
-
- 선택한 필터 인덱스
- 1부터 시작
-
Tile
-
- 대화상자의 타이틀명
-
InitialDirectory
-
- 대화상자의 초기 폴더의 경로를 설정
- @”C:\Temp” 또는 “C:\Temp” 형식으로
-
SaveFileDialog 창 띄우기 예시 코드
-
도구상자 -> 컨트롤 선택을 통해 SaveFileDialog 추가 후
private void button1_Click(object sender, EventArgs e) { saveFileDialog1.Filter = "데이터(*.dat)|*.dat|워드(*.doc)|*.doc"; if(saveFileDialog1.ShowDialog() == DialogResult.OK) { //파일 처리 } }
SaveFileDialog를 이용하여 파일 저장 예시 코드
private void button1_Click(object sender, EventArgs e) { string Message = "Hello World!"; Stream myStream; saveFileDialog1.DefaultExt = "dat"; saveFileDialog1.Filter = "데이터(*.dat)|*.dat|워드(*.doc)|*.doc"; if(saveFileDialog1.ShowDialog() == DialogResult.OK) { if((myStream = saveFileDialog1.OpenFile()) != null) using (BinaryWriter bw = new BinaryWriter(myStream)) { bw.Write(Message); } } }
OpenFileDialog
- 도구상자 -> 컨트롤의 형태
- 파일Stream제공 (선택적 사용)
- SaveFileDailog와 동일하게 사용
OpenFileDialog를 이용하여 파일 읽기 예시 코드
private void button2_Click(object sender, EventArgs e) { Stream myStream; openFileDialog1.Filter = "데이터(*.dat)|*.dat|워드(*.doc)|*.doc"; if(openFileDialog1.ShowDialog()==DialogResult.OK) { if((myStream = openFileDialog1.OpenFile()) != null) { using (BinaryReader br = new BinaryReader(myStream)) { MessageBox.Show(br.ReadString()); } } } }
ColorDialog
- 색상 대화상자
- 도구상자에서 추가 가능
- Color구조체 사용 -> ColorDialog.Color
- FullOpen속성 : 펼친 대화상자
- FullOpen = false;
- FullOpen = true;
ColorDialog 예제 코드
Color color1; private void button3_Click(object sender, EventArgs e) { if(colorDialog1.ShowDialog() == DialogResult.OK) { color1 = colorDialog1.Color; MessageBox.Show(color1.ToString()); } }