본문 바로가기

컴퓨터/언어,프로그래밍

[VB/.NET] Common Dialog Box(공용 대화 상자)

Common Dialog Box(공용 대화 상자)

CommonDialog 컨트롤은 Visual Basic과 Microsoft Windows 동적 연결 라이브러리 Commdlg.dll 루틴 간에 인터페이스를 제공합니다. 이 컨트롤을 사용하여 대화 상자를 만들려면 Commdlg.dll이 Microsoft Windows \System 디렉터리에 있어야 합니다.

공통 대화 상자를 폼에 추가하고 속성을 설정하여 응용 프로그램에서 사용할 수 있습니다. 컨트롤이 표시하는 대화 상자는 컨트롤의 메서드에 의해 결정됩니다. 실행 모드에서 대화 상자가 표시되거나 적절한 메서드가 호출될 때 도움말 엔진이 실행됩니다. 디자인 모드에서 CommonDialog 컨트롤은 폼에서 아이콘으로 표시됩니다. 이 아이콘의 크기를 변경할 수 없습니다.

CommonDialog 컨트롤을 사용하여 다음과 같은 공통으로 사용되는 대화 상자를 표시할 수 있습니다.

  • 열기, 다른 이름으로 저장,  색, 글꼴, 인쇄 상자

CommonDialog 컨트롤을 사용하려면

  1. CommonDialog 컨트롤을 추가하지 않았다면 [프로젝트] 메뉴의 [구성 요소]를 선택하여 도구 상자에 추가하십시오. [컨트롤] 탭이 있는 대화 상자를 찾아서 선택한 다음 [확인] 단추를 누르십시오.
  2. 도구 상자에서 CommonDialog 컨트롤을 선택하여 폼에서 그리십시오.

    폼에서 CommonDialog 컨트롤을 그리면 자동으로 크기가 조정됩니다. Timer 컨트롤과 마찬가지로 CommonDialog 컨트롤도 실행 모드에서 표시되지 않습니다.

  3. 실행 모드에서는 다음 표에서처럼 적절한 메서드를 사용하여 원하는 대화 상자를 표시할 수 있습니다.
메서드 표시되는 대화 상자
ShowOpen 열기
ShowSave 다른 이름으로 저장
ShowColor
ShowFont 글꼴
ShowPrinter 인쇄
ShowHelp Windows 도움말 항목 목차

cancelError 속성(true/false) : True 로 설정되면 [취소] 단추를 선택시 오류를 발생시킵니다. (대화상자 모두 공통)

1. 열기 및 다른 이름으로 저장상자의 Flags 설정은 다음과 같습니다.

상수 설명
cdlOFNAllowMultiselect &H200 [파일 이름] 목록 상자가 여러 구역을 허용하는지의 여부를 지정합니다.

실행 모드에서 원하는 파일을 선택하려면 키를 누르고 <위쪽 화살표>()와 <아래쪽 화살표>()를 사용하여 하나 이상의 파일을 선택할 수 있습니다. 이 과정이 끝나면 FileName 속성은 선택한 모든 파일의 이름이 들어있는 문자열을 반환합니다. 문자열의 이름은 공백으로 구분됩니다.

cdlOFNCreatePrompt &H2000 현재 없는 파일을 작성할지 여부를 대화 상자에서 물을지를 지정합니다. 이 플래그는 cdlOFNPathMustExist 플래그와 cdlOFNFileMustExist 플래그를 자동으로 설정합니다.
cdlOFNExplorer &H80000 탐색기 모양의 파일 [열기] 대화 상자의 서식 파일을 사용합니다. Windows 95와 Windows NT 4.0에서 사용됩니다.
CdlOFNExtensionDifferent &H400 반환하는 파일의 확장명이 DefaultExt 속성에 지정된 확장명과 다른지를 나타냅니다. 이 플래그는 DefaultExt 속성이 Null일 때 또는 확장명이 일치할 때 혹은 파일에 확장명이 없을 때 설정됩니다. 대화 상자를 닫자마자 이 플래그 값을 확인할 수 있습니다.
cdlOFNFileMustExist &H1000 [파일 이름] 입력란에 기존 파일 이름만 입력할 수 있음을 지정합니다. 이 플래그가 설정하고 부적합한 파일 이름을 입력하면 경고 메시지가 표시됩니다. 이 플래그는 자동으로 cdlOFNPathMustExist 플래그를 설정합니다.
cdlOFNHelpButton &H10 대화 상자에 도움말 단추를 표시합니다.
cdlOFNHideReadOnly &H4 [읽기 전용] 확인란을 숨깁니다.
cdlOFNLongNames &H200000 긴 파일 이름을 사용합니다.
cdlOFNNoChangeDir &H8 대화 상자에서 대화 상자가 열릴 때 디렉터리를 현재 디렉터리로 설정합니다.
CdlOFNNoDereferenceLinks &H100000 셸 연결(바로 가기 키라고도 함) 참조를 해제하지 마십시오. 기본적으로 셸 연결을 선택하면 셸에서 연결 참조를 해제합니다.
cdlOFNNoLongNames &H40000 긴 파일 이름은 사용할 수 없습니다.
CdlOFNNoReadOnlyReturn &H8000 반환된 파일이 읽기 전용 속성으로 설정되어 있지 않고, 쓰기 금지 디렉터리에 있지 않음을 지정합니다.
cdlOFNNoValidate &H100 CommonDialog이 반환하는 파일 이름에 유효하지 않은 문자가 들어갈 수 있음을 지정합니다.
cdlOFNOverwritePrompt &H2 선택한 파일이 이미 있을 경우 [다른 이름으로 저장] 대화 상자에서 메시지 상자를 표시하도록 합니다. 파일을 겹쳐 쓸지의 여부를 결정해야 합니다.
cdlOFNPathMustExist &H800 유효한 경로만 입력할 수 있는지를 지정합니다. 이 플래그를 설정하고 잘못된 경로를 입력하면 경고 메시지가 나타납니다.
cdlOFNReadOnly &H1 대화 상자를 만들 때 [읽기 전용] 확인란이 기본적으로 선택표시되도록 합니다. 또한 대화 상자가 닫힐 때 [읽기 전용] 확인란의 상태도 알려줍니다.
cdlOFNShareAware &H4000 파일 공유 오류를 무시할 것인지를 지정합니다.

2. 색 대화상자의 Flags 설정은 다음과 같습니다.
상수 설명
cdCClFullOpen &H2& 사용자 정의 색 구역을 포함하여 전체 대화 상자를 표시합니다.
cdlCCHelpButton &H8& 대화 상자에서 [도움말] 단추를 표시합니다.
cdlCCPreventFullOpen &H4& [사용자 정의 색] 명령 단추를 비활성화하여 사용자 정의 색을 지정할 수 없도록 합니다.
cdlCCRGBInit &H1& 대화 상자의 초기색 값을 설정합니다.

3. 글꼴 대화상자의 Flags 설정은 다음과 같습니다.
상수 설명
cdlCFANSIOnly &H400 대화 상자에서 Windows 문자 집합을 사용하는 글꼴만 선택할 수 있도록 지정합니다. 이 플래그를 설정하는 경우에는 기호만 들어있는 글꼴을 선택할 수 없습니다.
cdlCFApply &H200 대화 상자에서 [적용] 단추를 활성화합니다.
cdlCFBoth &H3 대화 상자가 사용할 수 있는 프린터 글꼴과 화면 글꼴을 나열하도록 합니다. HDC 속성은 프린터와 관련된 장치 컨텍스트을 지정합니다.
cdlCFEffects &H100 대화 상자에서 취소선, 밑줄, 색 효과를 설정할 수 있도록 합니다.
cdlCFFixedPitchOnly &H4000 대화 상자에서 고정 피치 글꼴만 선택하도록 지정합니다.
cdlCFForceFontExist &H10000 없는 글꼴이나 유형을 선택하려고 할 때 오류 메시지 상자가 나타나도록 지정합니다.
cdlCFHelpButton &H4 대화 상자에 [도움말] 단추를 표시하도록 합니다.
cdlCFLimitSize &H2000 대화 상자에서 Min 속성과 Max 속성에 지정한 값 범위에 있는 글꼴 크기만 사용하도록 지정합니다.
cdlCFNoFaceSel &H80000 글꼴 이름을 선택하지 않았습니다.
cdlCFNoSimulations &H1000 대화 상자에서 가상 글꼴 그래픽 장치 인터페이스(GDI)를 하지 않도록 지정합니다.
cdlCFNoSizeSel &H200000 글꼴 크기를 선택하지 않았습니다.
cdlCFNoStyleSel &H100000 글꼴 유형을 선택하지 않았습니다.
cdlCFNoVectorFonts &H800 대화 상자에서 벡터 글꼴 선택을 선택할 수 없도록 지정합니다.
cdlCFPrinterFonts &H2 hDC 속성에서 지정된 대로 프린터에서 지원하는 글꼴만 대화 상자에 나열하도록 지정합니다.
cdlCFScalableOnly &H20000 대화 상자에서 크기 조정할 수 있는 글꼴만 선택할 수 있도록 지정합니다.
cdlCFScreenFonts &H1 대화 상자에 시스템이 지원하는 화면 글꼴만 나열하도록 합니다.
cdlCFTTOnly &H40000 대화 상자에서 트루타입 글꼴만 선택할 수 있도록 지정합니다.
cdlCFWYSIWYG &H8000 대화 상자에서 프린터와 화면에서 사용할 수 있는 글꼴만 선택할 수 있도록 지정합니다. 이 플래그를 설정하는 경우 cdlCFBoth 플래그와 cdlCFScalableOnly 플래그도 설정해야 합니다.

3. 프린트 대화상자의 Flags 설정은 다음과 같습니다.
상수 설명
cdlPDAllPages &H0 [전체] 옵션 단추의 상태를 반환하거나 설정합니다.
cdlPDCollate &H10 [한 부씩] 확인란의 상태를 반환하거나 설정합니다
cdlPDDisablePrintToFile &H80000 [파일로 인쇄] 확인란을 비활성화합니다.
cdlPDHelpButton &H800 대화 상자에 [도움말] 단추를 표시합니다.
cdlPDHidePrintToFile &H100000 [파일로 인쇄] 확인란을 숨깁니다.
cdlPDNoPageNums &H8 [페이지] 옵션 단추와 관련된 편집 컨트롤을 비활성화합니다.
cdlPDNoSelection &H4 [선택] 옵션 단추를 비활성화합니다.
cdlPDNoWarning &H80 기본 프린터가 없을 때 경고 메시지가 나타나지 않도록 합니다.
cdlPDPageNums &H2 [페이지] 옵션 단추의 상태를 반환하거나 설정합니다.
cdlPDPrintSetup &H40 시스템에서 [인쇄] 대화 상자보다는 프린터 설정 대화 상자를 표시하게 합니다.
cdlPDPrintToFile &H20 [파일로 인쇄] 확인란의 상태를 반환하거나 설정합니다.
cdlPDReturnDC &H100 대화 상자에서 선택한 프린터에 대한 장치 컨텍스트를 반환합니다. 장치 컨텍스트는 대화 상자의 hDC 속성에서 반환합니다.
cdlPDReturnDefault &H400 기본 프린터 이름을 반환합니다.
cdlPDReturnIC &H200 대화 상자에서 선택한 프린터에 대한 정보 컨텍스트를 반환합니다. 정보 컨텍스트를 사용하면 장치 컨텍스트를 만들지 않고 빠르게 장치에 대한 정보를 얻을 수 있습니다. 정보 컨텍스트는 대화 상자의 hDC 속성으로 반환합니다.
cdlPDSelection &H1 [선택] 옵션 단추의 상태를 반환하거나 설정합니다. CdlPDPageNums와 cdlPDSelection 중 아무 것도 지정하지 않으면 모든 옵션 단추를 선택한 상태가 됩니다.
CdlPDUseDevModeCopies &H40000 프린터 드라이버가 여러 장의 인쇄 매수를 지원하지 않는 경우 이 플래그를 설정하면 [인쇄] 대화 상자에 있는 [인쇄 매수] 스피너 컨트롤이 비활성화됩니다. 드라이버가 여러 장의 인쇄 매수를 지원할 때 이 플래그를 설정하면 대화 상자가 필요한 매수를 Copies 속성에 저장하게 됩니다.

실행 모드에서 [인쇄] 대화 상자의 항목을 선택하면 아래 속성에 사용자의 선택 항목에 관한 정보를 간직하게 됩니다.
속성 결정
Copies 인쇄 매수
FromPage 인쇄 시작 페이지
ToPage 인쇄 멈춤 페이지
Hdc 선택한 프린터에 대한 장치 컨텍스트
 


예제사용 - 책에 나온 예제를 사용했습니다.(영진 출판사~) 비베공부하려면 최소한 2권정도의 책은 있어야겠죠.(흐흐 딱 두권입슴다.^^;)

개인적인 생각에 영진 출판사 책이 좋더군요. 하지만 아무리 좋은 책이라도 그 한권으로 모든걸 해결 할 수는 없겠죠.

'********************************
' 열기대화상자
'********************************
Private Sub 열기_Click()
' 다이얼로그 타이틀 지정
dlg공용.DialogTitle = "파일 열기"

' 파일 이름 필터 지정
dlg공용.Filter = "모든 파일(*.*)|*.*|텍스트 파일(*.txt)|*.txt"

' 다이얼로그 플랙 지정
dlg공용.Flags = 0

dlg공용.ShowOpen ' 파일 선택

' 선택 결과 표시
If dlg공용.FileName <> "" Then
MsgBox dlg공용.FileName
Else
MsgBox "선택을 취소하였습니다."
End If

End Sub


'메시지박스에 파일이름이 어떻게 나오는지 확인해 보세요.




'********************************
' 저장대화상자
'********************************
Private Sub 저장_Click()
' 다이얼로그 타이틀 지정
dlg공용.DialogTitle = "새 이름으로 저장"

' 파일 이름 필터 지정
dlg공용.Filter = "모든 파일(*.*)|*.*|텍스트 파일(*.txt)|*.txt"

' 다이얼로그 플랙 지정
dlg공용.Flags = cdlOFNOverwritePrompt

dlg공용.ShowSave ' 파일 저장

' 선택 결과 표시
If dlg공용.FileName <> "" Then
MsgBox dlg공용.FileName
Else
MsgBox "선택을 취소하였습니다."
End If

End Sub

'**********************************
' 색선택대화상자
'**********************************
Private Sub cmd색선택_Click()
' 다이얼로그 타이틀 지정
dlg공용.DialogTitle = "색상 선택"

' 색상 초기값
dlg공용.Color = 0

' 다이얼로그 플랙 지정
dlg공용.Flags = 0

dlg공용.ShowColor ' 색상 선택

' 선택 결과 표시
If dlg공용.Color <> 0 Then
MsgBox "배경색을 선택한 색으로 바꿉니다."
Me.BackColor = dlg공용.Color
Else
MsgBox "색상이 선택되지 않았습니다."
End If

End Sub

'이예제를 해보면 검은색은 사용할 수가 없다.   If dlg공용.Color <> 0 Then 이부분에서 0이아니면 ~ 이기때문인거 같은데 여기다 1값을 주던지 다른 값을 주시믄 되겠죠.
아니믄 에러처리를 해버리믄 됩니다.

dlg공용.CancelError = True 'cancelError속성을 true로 하면 cancel버튼을 선택시 에러가 발생됩니다.
On Error GoTo ErrHandler
dlg공용.Flags = cdlCCRGBInit         '색상 초기값 설정
dlg공용.ShowColor                         '대화상자 표시
Me.BackColor = dlg공용.Color         '폼의 배경색을 바꿈
Exit Sub

ErrHandler:
' 사용자가 [취소] 단추를 눌렀습니다.

'********************************
' 폰트대화상자
'********************************
Private Sub cmd폰트_Click()
' 다이얼로그 타이틀 지정
dlg공용.DialogTitle = "글꼴 선택"

' 폰트 초기값 결정
dlg공용.FontName = ""

' 다이얼로그 플랙 지정
dlg공용.Flags = cdlCFBoth

dlg공용.ShowFont ' 글꼴 선택

' 선택 결과 표시
If dlg공용.FontName <> "" Then
MsgBox "버튼의 폰트를 선택한 글꼴로 바꿉니다."

' 커맨드 버튼의 폰트를 선택된 폰트로 바꾼다.
With cmd폰트
.FontName = dlg공용.FontName
.FontSize = dlg공용.FontSize
.FontBold = dlg공용.FontBold
.FontItalic = dlg공용.FontItalic
.FontStrikethru = dlg공용.FontStrikethru
.FontUnderline = dlg공용.FontUnderline
End With
Else
MsgBox "폰트가 선택되지 않았습니다."
End If

End Sub
'**********************************
'프린트대화상자
'**********************************
Private Sub 프린트_Click()
' 다이얼로그 타이틀 지정
dlg공용.DialogTitle = "인쇄 선택"

' 인쇄 가능한 페이지의 범위를 지정
dlg공용.Min = 1
dlg공용.Max = 100

' 초기 인쇄 범위 지정
dlg공용.FromPage = 1
dlg공용.ToPage = 1

' 다이얼로그 플랙 지정
dlg공용.Flags = cdlPDPageNums

dlg공용.ShowPrinter ' 인쇄 선택

' 선택 결과 표시
MsgBox Str(dlg공용.FromPage) + "페이지부터 " + _
Str(dlg공용.ToPage) + "페이지까지 인쇄합니다."
End Sub
'**********************************
' 도움말대화상자
'**********************************
Private Sub 도움말_Click()
' 도움말 파일 지정
dlg공용.HelpFile = App.Path & "\testhlp.hlp"

' 도움말 호출 커맨드 지정
dlg공용.HelpCommand = cdlHelpContents

dlg공용.ShowHelp ' 도움말 표시
End Sub

'********************************
' cmd종료의 클릭 이벤트 핸들러.
'********************************
Private Sub cmd종료_Click()
Dim result As Integer

' 종료 확인 후 종료   이 부분도 기억하면 좋아요~
result = MsgBox("정말 종료하시겠습니까?", vbYesNo + vbQuestion, "종료확인")
If result = vbYes Then End

End Sub
☞ CancelError 속성(true/false) : True 로 설정되면 [취소] 단추를 선택시 오류를 발생시킵니다. (대화상자 모두 공통)


http://flyersim.com.ne.kr/


제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...