ㅇ. PrintDialoag
-> 인쇄대화상자 표시 컨트롤
-> .NET FrameWork의 PrintDialog 클래스에서 파생
-> 인쇄할 프린터를 선택하거나 문서에서 인쇄할 범위 선택

-> 속성
: AllowPrintToFile(파일로인쇄 True or False)
: AllowSelectioon(선택한 부분 인쇄 True or False)
: AllowSomePages(인쇄할 페이지 범위 True or False)

: Document (인쇄할 문서 셋팅 - PrintDocument객체 셋팅)

: PrinterSettings (프린터 셋팅)

: PrintToFile (파일로 인쇄 체크 되었는지 확인)
: ShowHelp, ShowNetwork

-> 메서드
: Reset (인쇄대화상자 표시할 때 모든 항목들이 기본값으로 셋팅됨)


ㅇ. PrintPreviewDialog
-> 미리보기 대화상자 표시 (미리보기 화면을 구현하지 않아도 자동으로 미리보기 화면이 표시)
-> .NET FrameWork에서 PrintPreviewDialog에서 파생
-> 속성
: AutoScaleBaseSize (기본 Zoom에 대한 설정)
: Document
: PrintPreviewControl

-> 메서드
: CreateHandle (별도의 대화상자 핸들 제공, 별도의 폼을 만들어서 대화상자 구성가능)
: Dispose (Resource 해지)


ㅇ. PrintPrevbiewControl
-> 인쇄미리보기 컨트롤
-> 간단하게 미리보기 화면 구성
-> .NET FrameWork의 PrintPreviewControl 클래스에서 파생

-> 속성
: AutoZoom, Zoom
: Columns, Rows
: Document
: StartPage

-> 메서드
: InvalidatePreview (미리보기 화면을 다시 부를때)
: ShouldPersistBackColor (설정된 컬러를 유지)
: ShouldPersistForeColor (설정된 컬러를 유지)



ㅇ. PageSetupDialig
-> 페이지 설정 대화상자
-> .NET FrameWork의 PageSetupDialog 클래스에서 파생
-> 페이지 여백, 용지 방향등을 설정
-> 속성
: AllowMargins, AllowOrientation, AllowPaper, AllowPrinter
: Document
: MinMargins
: PageSettings, PrinterSettings

-> 메서드
: Reset
: ShouldPersistMinMargins




ㅇ. PrintDocument
-> 문서를 인쇄할 때 사용
-> .NET FrameWork에 PrintDocument 클래스에서 파생

-> 속성
: DocumentName
: DefaultPageSettings
: PrinterSettings

-> 메서드
: Print
ㅇ. 메뉴구성하기
-> MainMenu 컨트롤
: 도구상자에서 MainMenu 컨트롤을 폼에추가하면서 사용 가능
: 디자인 모드에서 메뉴 설계가 더욱 편해짐
: 메뉴 디자이너를 이용하거나 혹은 동적으로 메뉴 구성

: 주요속성
- Checked : 메뉴 항목의 체크 상태
- DefaultItem : 기본항목으로 지정
- MDIList : 차일드 윈도우의 목록을 표시
(별도 코딩필요없이 자동으로 자식윈도우 리스트가 추가됨)
- MergeType : 메뉴가 합쳐지는 유형
(Add, Replace, MergeItems, Remove)
: MDIChild 윈도우에 메뉴가 있을때 메뉴를 합침
- OwnerDraw : 사용자가 직접 메뉴 항목을 그릴 것인지 지정
- ShortCut : 단축키를 지정
- ShowShortCut : 단축키를 표시할 것인지 지정.


ㅇ. 도구바 만들기
-> ToolBar 컨트롤
: ToolBar 컨트롤을 폼에 추가
: ImageList 컨트롤을 폼에 추가
: ImageList에 Bitmap 추가
: ToolBar 컨트롤에 버튼 추가
: 각 버튼의 속성 지정
: ToolBar_ButtonClick()이벤트에 대한 코딩
: 기존 VB6.0과 동일

Private Sub ToolBar1_ButtonClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) Handles ToolBar1.ButtonClick
Dim objBut As New ToolBarButton
objBut = e.Button
MessageBox.Show(objBut.ImageIndex)
End Sub

별도의 인덱스가 없기 때문에 ImageIndex를 이용함



ㅇ. 상태바 만들기
-> StatusBar 컨트롤
: 패널을 추가하고 속성을 편집

Protected Sub StatusBar1_Panel(ByVal sender As Object, _
ByVal e As System.WinForms.StatusBarPanelEventArgs)

Dim objPanel As StatusBarPanel

objPanel = e.statusBarPanel
MessageBox.Show(objPanel.Text)

End Sub

: 기본적인 구현방법은 ToolBar와 동일함
ㅇ. 윈도우 폼을 상속하여 새로운 폼을 상속함

ㅇ. 프로그램을 통한 상속
-> 상속하고자 하는 폼을 가지고 있는 네임스페이스를 참조
-> 클래스 정의에 상속하려고 하는 폼의 네임스페이스를 추가

Imports Namespace1
Public Class Form2 Inherits Namespace1.Form1

ㅇ. Inheritance Picker 이용 (가장 일반적이고 쉬운 방법)



-> 프로젝트에 Form 추가시에 "상속된폼" 으로 추가를 하면 상속가능한 폼 리스트가 표시되고 상속할 폼을 선택하여 추가하게된다.
-> 추가된 폼에는 상속된 폼에 있는 모든 컨트롤들이 ReadOnly로 표시된다.
-> 해당 컨트롤들을 수정하려면 상속시킬 폼의 컨트롤 속성중 Modifiers를 Public으로 해주고 해당 컨트롤 Event는 Protected로 해준다.

ㅇ. Base Form 컨트롤 보안 레벨
-> 버튼 이벤트에 대한 오버라이딩

상속될 폼
Protected Overridables Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Messagebox.Show("This is a base form.")
End Sub

상속된 폼
Protected Overrides Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Messagebox.Show(Textbox1.Text)
End Sub


ㅇ. 윈도우 폼에 대한 상속 방법
-> 동일 프로젝트에 있는 폼
: Picker 사용하면 편함
-> 다른 모듈에 있는 폼
: Picker 혹은 Inherite 구문 사용
-> 베이스 폼의 컨트롤 보안 레벨
: 상속 가능 혹은 Midifiers 속성을 이용한 수정
컴터 사양이 딸려서 VS로 작업하기 힘들때 유용하게 사용할수 있을것이다.

아니면.. 걍... 취향따라 쓰던지.. 쩝..


ㅇ. 컴파일러 화일명 : vbc.exe
(닷넷 프레임웍 폴더 확인)

ex)

vbc File.vb (단순 컴파일)
vbc /target:library file.vb (library(dll)로 컴파일)
vbc /out:My.exe file.vb (output file 지정)
vbc /defime:DEBUG=1 /optimize /out:File2.exe *vb (현재 디렉토리에 있는 모든 vb파일을 File2.exe로 최적화 시켜서 컴파일, DEBUG 조건 컴파일)
vbc /target:library /out:Something.dll *.vb (library(dll)로 컴파일 output 파일 지정)



ㅇ. 옵션 :

최적화(Optimization) : /optimize

/optimize[+] 최적화 수행 (안써주면 default)
/optimize- 최적화 수행하지 않음

-. 실행 파일을 작고, 빠르게 만들지만 디버깅이 어렵게 된다.
-. 그러므로 디버깅모드시에는 수행하면 안됨

출력 파일 지정 : /out:filename, /target

-. 이름을 지정하지 않은경우
: .exe는 sub main이 들어 있는 소스코드 파일 이름을 사용
: .dll은 첫번째 소스 코드 파일 이름을 사용

-. /targer 출력파일의 형태를 지정

/targer:exe 실행가능한 콘솔 응용프로그램을 생성
/target:library dll을 만든다.
/target:module 어셈블리에 추가할수 있는 모듈을 생성
: 모든 닷넷 언어에서 가져다가 사용가능
/target:winexe 실행 가능한 윈도우 프로그램을 생성


.NET 어셈블리 : /addmodule, /delaysign, /imports, /keyfile 등

/addmodule:module[,module2] 현재 컴파일 하고 있는 프로젝트에서 사용할수 있도록 지정한 모듈로부터 타입정보를 얻어옴.
/delaysign[+또는-] 어셈블리안에 사인을 함.. /keyfile 혹은 /keycontainer와 같이 사용 (모듈안에 Digital Signature를 삽입)
/imports:namespace[,namespace] 지정한 어셈블리에서 네임스페이스를 가져온다.


디버깅 오류체크 : /debug, /nowarn, /quiet, /removeintchecks 등

/bugreport 버그를 보고하기 쉽도록 여러 정보를 담은 파일을 생성
/debug 디버그 정보를 만들거나 생략 (반드시 알아야할 옵션중 하나)
/nowarn 컴파일시 경고 메세지를 만들지 않는다.
/quiet 문법관련 오류나 경고에 대한 코드를 포시하지 않는다.
/removeintchecks 정수형 오버플로우를 체크하지 않음
/warnaserror 경고를 오류로 표시한다.


선처리(Preprocessor) : /define

/define:symbol=value[,symbol=value] 조건 컴파일을 위해 사용할 상수를 정의

Sub Mytest()
#if debugmode then
'디버그 문장
#Else
'평상시의 코드
#End if

상기 예제에서 define시에 DEBUGMODE=True로 하면 디버그 문장이 False면 평상시 코드가 실행될 것이다.


자원(Resource) : /resource, /linkresource, /win32icon 등

/linkresource 리소스 연결
/resource 어셈블리 모듈안에 리소스 포함
/win32icon 출력 파일에 .ico 파일을 추가
/win32resource 출력 파일에 Win32 리소스를 추가

기타 옵션들 : @, /?, /baseaddress, /main, /nologo 등

/@response_file 컴파일러 옵션과 소스코드 파일들을 명시한 파일(중요)
/? 또는 /help 컴파일러 옵션 표시
/baseaddress dll의 기본 주소를 지정한다.
/main Sub Main 프로시져가 들어있는 클래스를 명시
/nologo 컴퍼일러 배너 정보를 생략
/optionexplicit 변수들을 선언한 후 사용할 수 있도록
/optionstrict 유형에 대한 체크를 강력히 함, 묵시적인 유형변환 금지
/optioncompare 문자열 비교시 바이너리로 할 것인지, 문자로 할 것인지 지정
/recurse 컴파일 할 소스 파일을 가져오기 위해 하위 폴더까지 검색
/rootnamespace 모든 유형 선언에 대한 네임스페이스 지정


ex)

vbc @Response.txt module1.vb
혹은
vbc @Response.txt /out:test1.exe module1.vb

Response.txt 파일 내용 :

/Import:"Microsoft.VisualBasic"
/Import:"System"
/Import:"System.Collections"
/Import:"System.Diagnostics"

-> vbproj 파일안에 Import 부분의 내용
기본 개념.. 따로 정리할 필요는 없을듯..

ㅇ. 구조적인 예외처리
: Try ~ Catch ~ Finally ~ End Try
: 오류 필터링
: 안정적이고 쉽게 오류에 대한 대응
형식)
Try
Try Statements
Catch [exception[As Type]][When expression]
catchstatements
[exit try]
Catch [exception[As Type]][When expression]
catchstatements
[exit try]
....
[Finally
finallystatements
End Try


: Exception 클래스
- 표준 코드와 분리하여 예외를 처리
- 지원 속성 (StackTrace, InnerException, Message,
HelpLink, Hresult, Source, TargetSite)




ㅇ. 비구조적인 오류 처리
: On Error ~
: 프로시져 내에서 오류처리
: 프로그램 속도 저하
: 디버그나 유지 보수가 어렵다.

형식)
On Error GoTo Line (or Label)

On Error Resume Next

On Error Goto 0 (에러처리 안함)

On Error Goto -1 (에러처리 루틴이 활성화 되어 있으면 Off 시킴)


: Err 개체
- 에러 발생시 에러 정보를 가진다.
- Raise 메서드 -> 일부러 Run-time 에러 발생
- Clear -> 강제로 Err 개체를 Reset


ㅇ. 오류의 종류
: 문법 오류 (Syntax Error)
: 실시간 오류 (Run-time Error)
: 로직 오류 (Logic Error)


Sample)

Try
Devide = Cint(First/Second)
carch when Second = 0
msgbox("Devide by Zero")
Finally

End Tty
ㅇ. 다형성이란
: 많은 클래스들이 동일한 속성과 메서드를 가지고 있을 경우 호출한 쪽에서는 현재 사용중인 개체가 어느 클래스를 기반으로 하고 있는지 알필요가 없다.

ㅇ. 다형성을 이용한 클래스 작성 접근방법

-. 인터페이스(Interface) 기반
: 기존의 VB6.0에서 사용
: 클래스 안에서 인터페이스 멤버를 구현한다.
- Interface키워드를 사용하여 인터페이스 정의
- Implements 키워드를 사용
: Overloads 키워드 사용 가능

형식)
Interface tmpInterface
Function Method1(ByRef s As String) As Boolean
Overloads Sub Method2()
Overloads Sub Method2(ByVal i As Integer)
End Interface

Ex)

Interface iPerson
Property LastName() As String
Sub Display()
End Interface

Class Emp
Implements iPerson
Private strName As String
Private strCompant As String

Public Sub Display() Implements iPerson.Display
MsgBox(LastName & " " & strCompant, , "Employee")

End Sub

Public Property LastName() As String Implements iPerson.LastName
Get
Return strName
End Get
Set(ByVal Value As String)

End Set
End Property

Public Property Company() As String
Get

End Get
Set(ByVal Value As String)

End Set
End Property
End Class

Dim perPerson As Iperson, empEmp As New Emp
empEmp.Company = "Company Name"
perPerson = empEmp
perPerson.LastName = "Yoo"
perPerson.Display()
empEmp.Display()


-. 상속(Inheritance)을 기반
: VB.NET에 새롭게 추가됨
: 베이스 클래스에서 메서드를 작성
: 파생된 클래스에서 오버라이딩

Ex)
상속을 이용한 클래서 두어개 만들고..
서브루틴 함수 호출해만서 클래스변수를 넘겨 주면..
해당 루틴안에서 어떤 클래스건 상관없이 공통의 메소드를 실행시켜 준다는 건데..
예제가 좀 기네..



사실.. 별거 아닌듯..

인터페이스를 기반으로 한거나.. 상속을 기반으로 한거나...

설명이 간단해서 그런가..

동영상 강좌로 공부하고 있는데..


별거 없지 싶은.. 쩝..

말만 너무 어려워서.. 쯧... -_-++
VB개발만 하다보니.. 개념이 헷갈려서.. 쯧..

ㅇ. 이미 존재하는 클래서(Base Class)로 부터 새로은 클래서(Derived Class)를 만들기 위해 사용.

ㅇ. 파생된 클래서에서는 속성, 메서드, 이벤트, 필드, 이벤트 핸들러등을 그대로 혹은 새롭게 정의해서 사용 가능

ㅇ. 한 프로젝트 내에서 다른 클래서로부터 혹은 프로젝트에서 찹조하고 있는 개체로부터 상속 가능

ㅇ. Array
-. VB6.0
: 배열첨자의 시작은 기본적으로 0
: Option Base문을 이용하여 1부터 시작하도록 지정 가능
: tmpArr(1 to 10) 가능
: 첨자가 0부터 시작하는 경우 Upper Bound +1이다.
Dim tmpArr(20) as Single : 21개의 요소를 가진다.


-. VB.NET
: 배열 첨자는 0부터 시작
: Option Base 문은 지원하지 않는다.
: 배열 참저는 0 ~ 배열크그 -1 이다.
Dim tmpArr(20) as Single : 20개의 요소를 가진다.


.NET FrameWork




Common Langauge Runtime




Base Class Liabrary

ㅇ. 상속 (Ingeritance)
-. 클래스 정의 이후 해당 클래스를 상속받아 새로운 클래스를 생성
-. 부모 클래스(base class)의 메서드를 파생된 클래스(child class)에서 새롭게 구성할수 있다.
-. 기본적으로 모든 클래스는 상속가능
-. Form등의 User Interface를 갖는 상속은 Visual Inheritance라고 한다.

+ Recent posts