PROGRAMMING WORKSHOP

.NetFrameWork | Window Form - Menu

메뉴를 좀더 만들어 보면서
다양한 표현방법을 익혀 나가도록 하자
앞 페이지에서
Dim oX As New Something
하여 개체를 생성하고 이것의 이벤트프로시져를 만들때
AddHandler oX.Click , AddressOf [프로시져명]
으로 하였었다
아래와 같이도 할 수 있어서 편리하다

Dim oMain As New MainMenu()
Dim oItem As MenuItem
oItem = New MenuItem("과일가게")
oItem.MenuItems.Add("사과", New System.EventHandler(AddressOf Me.MenuClick))
oItem.MenuItems.Add("오렌지", New System.EventHandler(AddressOf Me.MenuClick))
oItem.MenuItems.Add("귤", New System.EventHandler(AddressOf Me.MenuClick))
oItem.MenuItems.Add("바나나", New System.EventHandler(AddressOf Me.MenuClick))
oItem.MenuItems.Add("참외", New System.EventHandler(AddressOf Me.MenuClick))
oItem.MenuItems.Add("수박", New System.EventHandler(AddressOf Me.MenuClick))

한번에 이벤트프로시져까지 같이 올렸다
개체 만들고 별도로 이벤트만들기 코딩을 할 필요가 없이 간단하다

위와 같이 할 수 있다고 하는 것은 순환문으로 처리하면 또한 훨씬
쎄련된 구문이 될 것이다

Dim oMain As New MainMenu()
Dim oItem As MenuItem
oItem = New MenuItem("과일가게")
Dim sX() As String = {"사과", "오렌지", "귤", "바나나", "참외", "수박"}
For Each sText As String In sX
   oItem.MenuItems.Add(sText, New System.EventHandler(AddressOf MenuClick))
Next
oMain.MenuItems.Add(oItem)
Me.Menu = oMain

다른것은 Text속성만 다르게 적용하는 것이고 나머지는 똑같은 짓을 하니
당연히 순환문의 대상이 되는 일일 것이다
다른 정보 Text속성이 될것을 배열에 담고
배열을 순환하면서 오로지 Text속성만 전달하면 공장에서
빵 찍어 내듯이 줄줄이 만들어 지는 것!!



Dim WithEvents ... 혹은
AddHandler ... 같이 별도로 이벤트처리를 할 필요도 없이 기분좋게 간략히
만들어 지는 것!!

메뉴를 추가로 만들어 보고 텍스트상자를 폼에 꽉차게 하나 넣어서 이런 저런 작업을 해보면서
.NetFrameWork의 자원을 이것 저것 경험해 보도록 하자



개발도구들은 어떻게 하면 쉽게 빠르게 코딩을 할 수없을까
노력들을 한다..
이전 것에 얽메이면 새롭게 소개되는 것을 못보고 만다
그러니 항상 새로운것을 찾아서 숙달시키는 것이 좋다
그런 면에서 보면 항상 이야기하지만
엑셀과 VBA는 내공을 쌓는데 있어서 최적의 도구라는 점..
왜냐면 VBA는 VB의 완전 고전인 것이니..
기초를 갈고 딱는데는 제격인 것이다!!

메뉴룰 만든후 이벤트프로시져는 모두 아래의 하나만 사용하게 된다

' 폼이 로딩되면서 외부변수에 저장된 oTextBox를 처리한다

Sub MenuClick(ByVal sender As Object, ByVal e As EventArgs)
Dim sText As String = CType(sender, MenuItem).Text
Select Case sText
  Case "복사"
      If oTextBox.SelectedText <> "" Then
          Clipboard.SetText(oTextBox.SelectedText)
      Else
          MsgBox("문장을 선택하세요..")
      End If
	Case "자르기"
      If oTextBox.SelectedText <> "" Then
          Clipboard.SetText(oTextBox.SelectedText)
          oTextBox.SelectedText = ""
      Else
          MsgBox("문장을 선택하세요!!")
      End If
	Case "붙여넣기"
      Dim iData As IDataObject = Clipboard.GetDataObject()
      If iData.GetDataPresent(DataFormats.Text) Then
          oTextBox.SelectedText = CType(iData.GetData(DataFormats.Text), String)
      Else
          MsgBox("크립보드에 붙여 넣을 정보가 없습니다!!")
      End If
  Case "빨강"
      oTextBox.ForeColor = Color.Red
  Case "파랑"
      oTextBox.ForeColor = Color.Blue
  Case "녹색"
      oTextBox.ForeColor = Color.Green
  Case "기울임"
      oTextBox.Font = New Font(oTextBox.Font.Name, oTextBox.Font.Size, FontStyle.Italic)
  Case "언더라인"
      oTextBox.Font = New Font(oTextBox.Font.Name, oTextBox.Font.Size, FontStyle.Underline)
  Case "맑은 고딕"
      oTextBox.Font = New Font("맑은 고딕", 9, oTextBox.Font.Style)

  Case "Tahoma"
      oTextBox.Font = New Font("tahoma", 9, oTextBox.Font.Style)
  Case "Wingding 3"
      oTextBox.Font = New Font("wingdings 3", 9, oTextBox.Font.Style)
'아래 메뉴로는  흥미로운 재귀 용법을 연습하도록 하자!!!
' 프로그래머라면 재귀용법을 자유롭게 사용할 수 있어야 한다
  Case "사과", "오렌지", "귤", "바나나", "참외", "수박"
      oTextBox.Clear()
      For Each oItem As MenuItem In Me.Menu.MenuItems
          oTextBox.AppendText(oItem.Text & vbCrLf)
          writeSubItems(oItem)
      Next
End Select
End Sub

아...프로그래밍은 개체로구나..!!
개체지향적이어야 하겠구나..
이런 감각은 아마도 엑셀프로그램을 할때는 긴가..민가..
VBA와 엑셀개체의 경계선도 긴가..민가..감이 잡히지 않을 것이나..
이렇게 VB.Net에 접근하면서.
새삼 느끼게 될 것이다..아하..모든 것이 개체를 어떻게 찾아서
어떻게 활용하여야 하느냐로구나..!!!
엑셀개체를 새삼 다시 보게 되는 기회가 되는 것이고..
그런 기회를 드리고 싶어서 VB.Net...NetFrameWork를
열심히 이야기 하게 되는 것이다!!

***[LOG-IN]***