PROGRAMMING WORKSHOP

.NetFrameWork | 간단한 텍스트편집기 만들어 보기

VB프로그래밍을 배울때 항상 만들어 보는 텍스트 편집기를 만들어 보자
어느 프로그램에나 있는 기본메뉴는
화일에 관련하여(File)
화일을 새로 만들고(New)
화일을 열고(Open)
저장하고 (Save)
다른 이름으로 저장하고(Save As)
화일을 닫거나 프로그램을 끝내고(Exit)
그리고 편집(Edit)으로 가서는
잘라내고(Cut)
복사하고(Copy)
붙여 넣고(Paste)등이 기본적인 것이다
텍스트문서를 다루는 지극히 간단한 것을 만들어 보자



단축키에 대한 속성이 유용하다
Me.mnuEditCut.Shortcut = System.Windows.Forms.Shortcut.CtrlX
라고 하면 mnuEditCut메뉴아이템개체의 ShortCut속성에 Ctrl+X키를 치면
해당 명령이 실행된다



상위메뉴를 만들고 자식메뉴를 붙일때 아래와 같이 하는 방법도 있지만

Me.mnuFile.MenuItems.Add(Me.mnuFileNew)
Me.mnuFile.MenuItems.Add(Me.mnuFileOpen)
Me.mnuFile.MenuItems.Add(Me.mnuFileSave)
Me.mnuFile.MenuItems.Add(Me.mnuFileSaveAs)
Me.mnuFile.MenuItems.Add(Me.mnuFileSep)
Me.mnuFile.MenuItems.Add(Me.mnuFileExit)

아래와 같이 한줄로 처리하는 방법도 있고, 집합체에 떼거리로 정보를
줄때 흔하게 앞으로 나올 것이다

Me.mnuFile.MenuItems.AddRange(New System.Windows.Forms.MenuItem() { _
                                      Me.mnuFileNew, _
                                      Me.mnuFileOpen, _
                                      Me.mnuFileSave, _
                                      Me.mnuFileSaveAs, _
                                      Me.mnuFileSep, _
                                      Me.mnuFileExit})

AddRange메소드는 집합체를 다루는데 일반적으로 자주 활용된다
엑셀 VBA에 내공이 깊으신 분들은 아마도
Shapes의 ShapeRange가 기억이 나실 것이다..이것도 도형을 떼거리로
관리할때 사용하고 각 도형개체를 배열로 전달하였었던 것이 기억날 것이다

필요한 개체 변수만들고,
개체 생성하여 변수에 담었으면
이제 해당개체의 이벤트프로시져에서 실제적인 작업을 개체들에게
시키면 프로그램 완성이다
1)개체변수선언
2)개체생성
3)개체별 이벤트프로시져에 작업내용 작성
복잡하게 생각할 것 없이 간단하다
그리고 개체들의 속성과 메소드를 잘 이해하고 활용하면 되는것이다
엑셀 VBA에서도 이벤트프로시져를 잘 활용하면 좋은 소루션되는 것이고!!
텍스트 문서 편집도구를 만든다고하는 것은 텍스트정보를 하드메모리에
화일명을 붙여서 저장하고 갖여 오고 하는 것..
이런 일을 하는 것이 System.IO 네임스페이스에 있는 개체들을
또 활용하면 되는 것..
Form1.vb도 크래스모듈이고 Form1.designer.vb도 크래스모듈..모두 크래스 모듈이다
이벤트프로시져를 Form1.vb 모듈에서 작성하게 된다
이때 작업의 부속품으로 아래와 같이 2개의 속성을 만들어 보자

Public Class Form1
' 두개의 휠드
' 아래와 같이 크래스모듈선언부에 변수는 엄밀히 말하면 휠드라고 한다
' 휠드는 단순히 값만 보관하는 변수..
Private m_sFileName As String
Private m_bDirty As Boolean

' 속성은 아래와 같이 Property로 표현되는 프로시져이고
' 속성의 편리한 것은 휠드의 값을 쓰고 읽고 하면서
' 필요한 작업을 하게 되는 것이다
' 단순히 값만 주고 받는 변수와 달리 일을 하는 프로시져를
' 포함시킬수 있는 편리함이 있는 것이다
' VBA의 크래스모듈에서의 속성과는 달리
' 하나의 속성프로시져에서 읽고 쓰기를 모두 처리 한다
' Get은 읽기(Read), Set 은 쓰기(Write)

Public Property FileName() As String
    Get
        Return m_sFileName
    End Get
    Set(ByVal Value As String)
        m_sFileName = Value
        Me.Text = "Note - " & m_sFileName
    End Set
End Property

Public Property Dirty() As Boolean
    Get
        Return m_bDirty
    End Get
    Set(ByVal Value As Boolean)
        m_bDirty = Value
        If Value = True Then
            Me.Text = "Note - " & m_sFileName & "*"
        End If
    End Set
End Property

속성 하나는 화일명을 보관하고 있는 것이고
다른 하나는 화일에 새롭게 정보를 입력했는지를 표현하는 것이다
이것이 True로 되어있다면 프로그램을 닫을때 저장하겠냐고 물어 볼수 있는
표시가 되는 것

텍스트문서를 다룰때 복사,잘라내기,붙여넣기를 하려면
윈도우시스템이 모든 프로그램에 제공하는 ClipBoard(복사판)을
중간 정보의 계류장으로서 활용한다
엑셀 VBA를 하시는 분들도 아마 아래의 것을 기억하실수 있을 것이다

아래를 복사하여 VBA모듈시트에 붙여 넣고
마우스로 모듈시트내의 아무 코드나 복사한후 아래의 것을 실행시켜 보면
방금 복사한 내용을 읽어 내는 것을 볼 수 있을 것이다

Sub dataObject_()
Dim oX As New DataObject
oX.GetFromClipboard
MsgBox oX.GetText
End Sub

엑셀 VBA에서 한번도 DataObject라는 개체를 사용한적이 없다면
위의 것을 실행해 보시면 된다
엑셀 VBA에서는 직접적으로 ClipBoard에 접근하지 않고 DataObjct개체를
통하여 접근하여 작업을 하지만 .NetFrameWork에서는 ClipBoard개체에 직접
접근하여 작업한다
아래의 그림과 같이 편집메뉴를 ClipBoard상태, 텍스트내용의
선택상태에 따라서 메뉴를 활성화시키기고 하고 비활성화시키기도 한다



간단하지만 화일을 다루는데 기본적인 내용을 요약한 셈이다
자세한 것은 첨부화일의 설명을 보시고..

***[LOG-IN]***