PROGRAMMING WORKSHOP

.NetFrameWork | Window Form - Menu

엑셀에서도 메뉴시스템에 2003이전부터 사용하던 CommandBar개체시스템이
있는 가하면 2007버전이후의 새로운 메뉴시스템인 리본이라는 것이 있듯이
윈도우에도 이전에 사용하던 메뉴시스템이 있다
앞페이지에서 사용한 것이 최신 버전이고 지금 해보려고 하는 것이
이전 버전의 것이다
이렇게 개체는 새롭게 만들어지고 추가 되고 하는 것이니
당연히 이것 저것 헷갈리는 것이 당연한 것일 것이다

또 버전과는 상관없는 이야기지만
개체를 생성하고 개체의 이벤트프로시져를 작성하여
AddHandler로 하는 방법이 있는 가 하면
엑셀에서 크래스모듈을 사용하여 UserForm의 버튼을 생성하던것을
해보았단 기억이 난다면...아하..이곳에서도 그런 것이 있구나..
할 내용은
변수를 선언할때 WithEvents 키워드를 사용하면
이벤트프로시져가 자동으로 생성된다는 것을 알고 계실 것이다
폼의 모듈시트의 선언부에 아래와 같이 선언하면

Dim WithEvents menuItem1 As New MenuItem
Dim WithEvents menuItem2 As New MenuItem
Dim WithEvents menuItem3 As New MenuItem
Dim WithEvents menuItem4 As New MenuItem



그림과 같이 만들어져서 이곳에 크릭하면 어떤일을 하라는 것을
작성하는 방법도 있는 것이다
하지만 AddHandler를 사용하는 것이 위의 것 보다 훨 프로그래밍적이나
각자의 코딩스타일의 기호에 따라서 선택할 일이다
위의 것은 그렇다는 것만 참고로 아시는 것이 좋을 것이다
아무튼 여기에는 메인메뉴에 자식메뉴 4개 붙여서 아래와 같은 작업을
해보도록 한다



메뉴시스템의 활용과 더불어..
그냥 하면 심심하니까..
그래픽을 표현하는 도구들을 건드려 보도록 하자
그래픽을 표현하는 것이 프로그래밍을 배울때는 아주 좋은 학습대상이다
또한 윈도우의 그래픽을 표현하는 개체들은 몇개 알면
흥미롭고 재미있는 것들이다

엑셀에서 도형을 그릴때를 상기 해보시면
도형을 구성하는 것은 위치정보, 크기정보
그리고 도형을 구성하는 선(Line)에 대한 정보,
도형의 바탕을 채우는 채우기(Fill)에 대한 정보등을 생각하시면
이해하기 편한 것이 된다

이미 위치와 크기에 대한 정보개체는 앞에서 했었다
모두 Drawing 네임스페이스하에 들어가는 것들이다
Point개체로 위치를 잡고 Size개체로 크기를 잡았었다
만약 사각형을 그린다고 하면

Dim oGraphic As Graphics = Me.CreateGraphics
모든 도형의 스크린 역할이 되는 그래픽개체
여기에서 Me는 윈도우폼을 말하는 것이고..

Dim oLocation = New Point(10, 10)
시작위치 정보 엑셀에서 도형그릴때 Left와 Top에 대한 정보를 개체로

Dim oSize = New Size(폭, 높이)
도형의 폭과 높이 엑셀에서 도형그릴때 Width와 Height에 대한 정보

Dim oPen = New Pen(색상, 선굵기)
테두리선에 대한 정보개체 선의 색상정보와 선의 굵기 정보
엑셀에서 도형의 테두리를 지정하는 LineFormat개체와 같은 것

Dim oRectangle As New Rectangle(oLocation, oSize)
그리고 도형을 원을 그리던,사각형을 그리던 하나의 외곽프레임
역할을 하는 개체 ..매개변수로 위치정보와 크기 정보를 전달한다
이제 도형을 그리기 위한 정보가 모두 준비되었다
아래와 같이 최초 선언한 Graphic개체의 DrawRectangle 메소드로
그린다..이때 매개변수는 위에서 생성한 테두리정보와 도형이
앉을 위치를 갖은 Rectangle개체를 전달하면 척 그림을 그려준다

oGraphic.DrawRectangle(oPen, oRectangle)

이것은 아하..챠트같은 것도 그리고 모두 표현할 수 있겠구나??!!
라는 생각을 갖으면 퍽 다행스러운 것!!!
엑셀은 주어진 형식의 차트로 표현한다면
윈도우폼에서는 좀 정성을 드린다면 자기만의 독특한 표현이
가능하다는 이야기도 되는 셈이다

왜 쓸데없이 Point개체다, Size개체같은 것을 별도로 만들고
수선을 떠는지 그림으로 좀더 이해를 돕자면



와 같이 하나의 위치정보, 하나의 규격정보 이것을 또 합쳐서
하나의 사각프레임(Rectangle..원이던 사각형이던)을 만들어서
여러개의 도형에 사용할수 있는 진정한 개체지향적 처리인것이다
예를 들어서 Point정보같은 것은 도형에도 사용할 수 있을 것이고..
더 나가서 모바일의 위치정보의 좌표에서도 활용할 수 있고
해당위치에서 영향권이 있는 범위는 Size개체로도 적용을
할수 있다는 각자가 독립적인 개체라는 이야기다

첨부화일에
Size,Rectangle,Point를 외부변수로 한번 만들어 놓고
원을 그릴때, 사각형을 그릴때 같이 사용하는 것을 보시면 아하..!!
하실 것이다

어..그런데 이상한데요..
개체생성할때 아래와 같이 New를 하지 않아도 되는데요???
라는 의문을 갖는다면 좋겠다

Dim oPoint As Point
oPoint.X = 100
oPoint.Y = 29
Dim oLoc As Size
oLoc.Width = 100
oLoc.Height = 100

이것은 VBA에서 사용하는 사용자정의 변수인 구조체(Strucure)와 같은
형식인 것이다..구조체의 간편성과 크래스를 섞은 변종이라고나 할까
그래서 Stucture...사용자정의변수와 같으면서 개체의 역할을
한다고 할 수 있을 것이다
개체라기 보다는 구조체라고 부르는 것이 좋을 것이다
코딩하면서 쩜찍으면 나타나는 자동목록상에 일반 크래스와
Structure 개체는 아래의 그림과 같이 모양이 다르다



언어나..개체나 매일 개선되고 발전되는것
그러니 새로운 것이 자꾸 나오는 것은 당연한 것으로 받아들이는 것이
건강에 좋다
그러다 나쁘면 없애고..또 만들고..

***[LOG-IN]***