9 주차 메뉴및폼의관리 대림대학 2011 년도 1 학기홍명덕 (myungduk.hong@gmail.com)
명령어를주제별로묶어서선택편리하게사용선택시나타날수있는반응 바로실행대화상자띄움. 생략표 (... ) 를추가 메뉴구성규칙파일, 편집, 도움말의 3 가지메뉴를반드시포함메뉴모음표시줄 (MenuStrip) 인터액티브방식으로메뉴작성 2
메뉴항목에이름짓는규칙 항목이름은메뉴상에서는유일해야함항목이름은단일어또는복합어를사용단일어 - 닫기 복합어 - 파일열기 단축키정의시글자는유일해야함 2개의타이틀메뉴에서단축키는유일생략표 ('...') 는메뉴가선택된다음에도추가로더정보를알려주어야하는경우이용메뉴이름은짧게하는것이좋음 작성방법 메뉴모음표시줄 (MenuStrip) 이용 3
편리한기능추가방법 종류기능설명사용예 서브메뉴만들기 5 단계까지능 (1 단계까지만드는것을선호 ) 분리바액세스키단축키메뉴명령을그레이상태로 항목들사이에넣어주는수평선 주제별로분리할때사용 메뉴에서밑줄쳐진키를눌러서선택하는키 Alt 키를사용해서선택 바로실행되는키 메뉴의오른쪽에표시 Enabled 속성 False 로설정 사용자로부터입력을받지않음 예 ) mnunewfile.enabled = False 4
편리한기능추가방법 ( 계속 ) 종류기능설명사용예 메뉴타이틀의그레이 메뉴컨트롤에체크표시하기 메뉴컨트롤에라디오버튼표시하기 메뉴에그림넣기 모든메뉴항목이영향받음 예 ) mnufile.enabled = False 사용자로하여금키거나꺼야하는상태를알려줄때 메뉴를선택할때마다번갈아가면서체크표시를해야할때 여러개의값중에서어떤값을선택해야하는경우 ( 복수선택가능 ) Checked 속성 : 체크여부결정 (True, False) 여러개의값중에서오직하나의값을선택해야하는경우 Checked 속성 : 체크여부결정 (True, False) RadioCheck 속성 : 라디오버튼표시여부 (True, False) Image 속성 : 이미지의경로지정 ImageScaling 속성 : 원본이미지의크기또는도구모음줄의크기에맞출지결정 (None, SizeToFit) 5
특징 메인메뉴까지마우스이동을하지않음메뉴를팝업형태로띄움현재마우스포인터가가리키고있는곳의기능이메뉴로만들어짐바로메뉴를실행할수있도록도와줌작성방법메뉴모음표시줄로메뉴작성컨텍스트메뉴의이름을지정 사용하고자하는컨트롤에서컨텍스트메뉴모음표시줄의이름을연결 6
사용경우 사용자로부터입력을받아야할경우사용자에게결과를알려주어야할경우 대화상자작성방법 1. 미리만들어져있는대화상자사용 InputBox와 MsgBox라는함수 2. 컨트롤을배열시켜서원하는모양의대화상자작성 3. 공용대화상자컨트롤을사용 7
특징 손쉬운반면에사용제한모달대화상자로만사용 InputBox 함수 메시지를전달하고, 입력을받을때사용 FileName = InputBox(" 파일이름을입력하세요."," 파일열기 ") MsgBox 함수사용자에게에러나경고메시지를알려주기위한목적 MsgBox " 파일을열다가에러가발생했습니다. 다시파일을입력하세요.", MsgBoxStyle.OKOnly," 문서편집기 " 8
MsgBox 의버튼상수리스트 대화상자의버튼의개수와안의내용결정 (MsgBoxStyle) 멤버이름설명멤버이름설명 OkOnly 확인단추전용 ( 기본값 ) Information 정보메시지 OkCancel 확인, 취소단추 DefaultButton1 첫번째단추가기본값 AbortRetryIgnore 중단, 다시시도및무시단추 DefaultButton2 두번째단추가기본값 YesNoCancel 예, 아니요, 취소단추 DefaultButton3 세번째단추가기본값 YesNo 예, 아니요단추 ApplicationModal 응용프로그램모달메시지상자 RetryCancel 다시시도, 취소단추 SystemModal 시스템모달메시지상자 Critical 중대오류메시지 MsgBoxHelp 도움말텍스트 Question 경고쿼리 MsgBoxRight 오른쪽에맞춰진텍스트 Exclamation 경고메시지 reference : http://msdn.microsoft.com/ko-kr/library/c287y667(vs.90).aspx 9
MsgBox 의버튼상수리스트 사용자가선택한결과를반환 (MsgBoxResult) 멤버이름 설명 멤버이름 설명 Ok 확인단추를눌렀습니다 Ignore 무시단추를눌렀습니다 Cancel 취소단추를눌렀습니다 Yes 예단추를눌렀습니다 Abort 중단단추를눌렀습니다 No 아니요단추를눌렀습니다 Retry 다시시도단추를눌렀습니다 reference : http://msdn.microsoft.com/ko-kr/library/microsoft.visualbasic.msgboxresult(v=vs.90).aspx 10
특징 원하는컨트롤을직접배열응용프로그램이필요로하는정보를입력받도록설계 새로운대화상자만들기 ' 프로젝트 ' 메뉴에서 'Windows 폼추가' 메뉴항목선택 ' 새항목추가 ' 대화상자에서폼이름을입력해서새로운폼을생성폼의모양을설계 11
사용속성 Text 속성 원하는제목기입 frmabout.text = " 문서편집기정보 " ControlBox 속성 컨트롤메뉴박스제거 FromBorderStyle 속성 실행중에대화상자의경계선모양을결정 MaximizeBox 속성 Maximize Button 제거여부를결정 MinimizeBox 속성 Minimize Button 제거여부를결정일반적인대화상자공통속성 속성설정영향 FromBorderStyle FixedSingle 프로그램실행중에대화상자의경계선의크기를조절할수없습니다 ControlBox False 컨트롤메뉴박스를제거합니다 MaximizeBox False Maximize 버튼을제거합니다. 실행중에전체화면표시를할수없습니다 12 MinimizeBox False Minimize 버튼을제거합니다. 실행중에아이콘표시를할수없습니다
폼의생성과삭제폼의생성폼도하나의클래스기존의객체를생성하는방법과동일 Dim MyForm As frmmain = New frmmain() ' 폼생성 폼의제거 Close() 메서드사용화면과메모리에서제거 Sub btend_click() MyForm.Close() End Sub ' 폼을메모리에서제거함 13
대화상자화면에나타나게하기폼의 Visible 속성을 True 설정모달대화상자사용자가오직대화상자의질문에만답변 MyForm.ShowDialog() ' 폼이화면에나타남. 그뒤의프로그램은바로실행되지않음.. 모달리스대화상자사용자가질문도중에포커스를다른폼으로이동가능 MyForm.Show() ' 폼이화면에나타남. 그뒤의프로그램은바로실행됨... 14
대화상자화면에서감추기 Hide() 메서드폼의 Visible 속성을 False로설정 MyForm.Hide() ' 화면에서사라짐 15
시작폼세팅하기여러개의폼중에서어떤폼을제일먼저실행할지결정 Sub Main 특정서브프로시저부터실행 Module Begin Public Sub Main() MsgBox(" 안녕하세요 ") End Sub End Module 16
Form_ Load 이벤트프로시저폼이메모리에올려졌을때제일먼저실행되는프로시저폼에관계된초기화작업을수행 Sub Form_Load() ' 폼의불투명도를 70% 로설정합니다. Me.Opacity = 0.7 Me.Refresh() ' 폼을다시그려줍니다. End Sub 17
Form_ Closing, Form_ Closed 이벤트프로시저 폼이메모리에서제거될때바로전에발생되는이벤트 Closing 이벤트시스템메뉴에서닫기버튼을눌러서프로그램을종료하게되면발생데이터의제거용도 Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _ System.ComponentModel.CancelEventArgs) Handles MyBase.Closing End Sub... e.cancel : 폼이메모리에서제거될지여부를결정... 18
Form_ Closing, Form_ Closed 이벤트프로시저 e.cancel 속성 True 대입하면종료작업을취소 19 Private Sub Form1_Closing(ByVal sender As Object, ByVal e As _ System.ComponentModel.CancelEventArgs) Handles MyBase.Closing Dim strmsg As String = " 변경사항을저장하시겠습니까?" Dim iret As Integer ' 저장할지물어보는대화상자띄움 iret = MsgBox(strMsg, MsgBoxStyle.YesNoCancel + MsgBoxStyle.Question, _ " 제목없음 - 메모장예제 ") Select Case iret Case DialogResult.Cancel e.cancel = True : strmsg = " 취소되었습니다." Case DialogResult.Yes e.cancel = False : strmsg = " 데이터가저장되었습니다." Case DialogResult.No e.cancel = False : strmsg = " 데이터가저장되지않았습니다." End Select MsgBox(strMsg, MsgBoxStyle.OKOnly, " 확인 ") End Sub
Form_ Closing, Form_ Closed 이벤트프로시저 Closed 이벤트 Closing 이벤트다음에발생최종적으로마무리작업처리 Private Sub Form1_Closed(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles MyBase.Closed... ' 최종적인마무리작업을수행합니다.... End Sub 20
드라이브, 디렉토리, 파일이름과확장명선택을도와줌 속성기능설명사용예 Title 대화상자의제목표시줄에나타나는 cdgopen.title = " 파일열기대화상자 " 문자열을반환하거나설장합니다 FileName 선택한파일의이름을반환합니다 Result = cdgopen.filename Filter 대화상자의형식목록상자에나타나는 cdgopen.filter = " 모든파일 (*.*) *.* 필터를반환하거나설정합니다 텍스트파일 (*.txt) *.txt" FilterIndex 여러개의필터중에서어느것을처음에나타나게할지설정합니다 cdgopen.filterindex = 2 InitialDirectory 초기파일폴더를반환하거나설정합니다 cdgopen.initialdirectory = "c:\" 21
파일열기대화상자사용법확장자의종류를지정 cdgopen.filter =" 모든파일 (*.*) *.* 텍스트파일 (*.txt) txt) *.txt" ShowDialog() 메서드를사용 Private Sub btfileopen_click(byval sender As System.Object, ByVal e As _ System.EventArgs) Handles btfileopen.click 22 'txt 와모든파일을필터로지정 cdgopen.filter = " 모든파일 (*.*) *.* 텍스트파일 (*.txt) *.txt" cdgopen.filterindex = 2 ' 기본으로나타날필터지정 ' 파일열기대화상자띄움 If (cdgopen.showdialog() = DialogResult.OK) then '" 열기 버튼을선택하면서브프로시저를호출해서파일을실제로연다. ' OpenFile() 서브프로시저는사용자가작성한내용이들어있음 OpenFile(cdgOpen.FileName) End If End Sub
다른이름으로저장대화상자 파일열기대화상자와기능은유사저장의목적으로사용됨 'txt와모든파일을필터로지정 cdgsave.filter = " 모든파일 (*.*) *.* 텍스트파일 (*.txt) *.txt" cdgsave.filename = "NoName" ' 기본파일이름지정 cdgsave.filterindex d = 2 ' 기본필터를 *.txt t 로지정 cdgsave.showdialog() ' 파일저장대화상자띄움 23
반환값에따른의미 멤버이름 설명 None 대화상자에서 Nothing이반환됩니다. 이는모달대화상자가계속실행중임을의미합니다 OK 대화상자반환값은 OK 입니다 Cancel Abort Retry Ignore Yes No 대화상자반환값이 Cancel입니다대화상자반환값이 Abort입니다대화상자반환값이 Retry입니다대화상자반환값이 Ignore입니다대화상자반환값이 Yes입니다대화상자반환값이 No 입니다 reference : http://msdn.microsoft.com/ko-kr/library/system.windows.forms.dialogresult(v=vs.90) 24
새로운색상을선택할수있도록도와줌 Color 속성 : 선택한색상속성이결과값으로저장색상대화상자사용법 : ShowDialog() 메서드 Private Sub btcolor_click(byval sender As System.Object, ByVal e _ As System.EventArgs) Handles btcolor.click ' 색상대화상자띄움 If cdgcolor.showdialog() = DialogResult.OK Then txtselect.backcolor = cdgcolor.color ' 선택한색상출력 End If End Sub 25
글꼴의종류, 크기, 색상, 스타일등을선택하도록도와줌 Font 속성 : 선택한글꼴속성이결과값으로저장글꼴대화상자사용법 : ShowDialog() 메서드를사용 Private Sub btfont_click(byval sender As System.Object, ByVal e _ As System.EventArgs) Handles btfont.click ' 글꼴대화상자띄움 If cdgfont.showdialog() = DialogResult.OK Then txtselect.font = cdgfont.font ' 선택한글꼴로지정 End If End Sub 26
폴더를선택하도록도와줌 SelectedPath 속성 : 선택한폴더의경로속성이결과값으로저장 Desciption 속성 : 폴더대화상자의제목을변경글꼴대화상자사용법 : ShowDialog() 메서드를사용 Private Sub btfolder_click(byval sender As System.Object, ByVal e As _ System.EventArgs) Handles btfolder.click ' 폴더탐색대화상자의제목을지정함 cdgfolder.description = " 폴더를선택하세요." ' 폴더탐색대화상자띄움 If cdgfolder.showdialog() = DialogResult.OK Then txtselect.text = cdgfolder.selectedpath End If End Sub ' 선택한폴더의경로출력 27