PROGRAMMING WORKSHOP

.NetFrameWork | Window Form

엑셀과 관련하여 DataGridView콘트롤이 가장 유사한 인터페이스를
갖고 있어서 이것을 먼저 급하게 하다 보니..좀 버거운 DB까지 가느라고
지루했을 것이다
DataGridView콘트롤에서 흥미를 갖다가..DB로 가면서 너무 많은
Data관련 개체가 나오니까...좀 어지럼증이 오시는 것 같아서..
이 주제는 또 발전되켜 추가하도록 하고
기초부터,급한 것 부터 하는 것이 좋겠다
흥미있게 다시 시작하도록 하자
윈도우프로그래밍의 재미를 맛보면서 엑셀과 계속 비교하여 가도록 한다
윈도우프로그래밍의 인터페이스는 윈도우다..
마우스로 콘트롤들 끌어다 놓고 하는 것이 아닌
코딩을 통하여 흥미로운 것들을 만들면서 자연스럽게 습득되어
엑셀에서 확장 .NetFrameWork에서 그리고 VSTO로 엑셀소루션을 만들수
있도록 진행해 나가자

Window Form을 띄우다 보면 여러개의 폼을 띄워야 할 경우가 많다
이때 부모폼과 자식폼관계를 유지 시켜주어야
부모가 닫히면 자식도 같이 닫치고..
아래의 그림과 같이 프로그래밍적으로 만들어 보자



윈도우 프로젝트하나 만들고
해당폼의 Load 이벤트프로시져에 아래와 같이 작성한다

Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim oBtn As New Button With oBtn .Text = "Show Kid Form!!!" .Location = New Point(5, 5) .Size = New Size(150, 30) .BackColor = Color.White .Font = New Font("맑은 고딕", 10) End With AddHandler oBtn.Click, AddressOf CreateChildForm Me.Controls.Add(oBtn) End Sub

윈도우폼에 도구상자에서 버튼을 끌어다 놓고 하는것보다
코딩하는 것이 빠르게 된다면 바람직..
폼이 Load 되면서 여러분이 위와 같이 프로그램한대로
폼에 버튼이 하나 만들어지고 캡션(text속성)에 뭐라뭐라..작성하고
위치(Location속성)를 (Point 개체를 받는다) Now Point개체로 X,Y위치값주고
크기(Size속성)을 (Size 개체를 받는다) New Size개체로 폭..Width, 높이..Height값주고
바탕색(BackGround속성) 은 Color개체의 White 속성을 주고
글자체(Font속성)은 Font개체를 만들어서 주고
죄다 개체판이라는 점..아시고..그래서 흥미롭고 재미있는 것
그리고 버튼에 지능을 심어주는 일..Click할때 어떤 일을 시킬것인지
이벤트프로시져를 하나 연결해준다..이 연결해주는 일은
엑셀에서 도형이나 콘트롤의 OnAction속성에 프로시져명을 문자열로
주었던 것이 기억 날것이다
그것과 마찬가지로..

AddHandler oBtn.Click, AddressOf CreateChildForm

여기에서 AddHandler는 이벤트프로시져를 연결하라!!라는 소리다
어떤 이벤트가 발생할때 추가할까요...부분이

oBtn.Click

즉 버튼의 Click 할때의 이벤트를 말하는 것이다
어떤 것과 연결할까요..어디로 찾아갈까요..부분이

AddressOf CreateChildForm

즉 CreateChildForm이라는 프로시져로 찾아가라!!라는 소리다

엑셀 VBA에서

Dim oShp As Shape
Set oShp=Worksheets("..").Shapes.AddShape(....)
oShp.OnAction="프로시져명"

를 기억하시면 좋겠다
이때 프로시져명을 엑셀에서는 문자열로 보냈지만 VB.Net에서는
문자열이 아닌 프로시져이름을 그대로 적용한다
엑셀에서 하던 습관으로 문자열로 주면 당연 에러!!

이제 버튼을 크릭하면 자식폼을 만들고
자식폼에 버튼을 또 하나 붙이고
이 버튼을 크릭하면 다른 프로시져가 실행되고
이 프로시져와 변수들은 부모가 죄다 갖고 있다
버튼을 크릭하면 부모폼의 캡션에 값이 계속 증가하는
변수 공유라는 관점에서 보시면 좋을 것이다

아래 첨부화일에서는 아래의 그림과 같이 버튼을 하나 더 만들고
계속 크릭할때마다 똑같은 폼이 생성되는
New 개체의 의미를 잘 알고 시작하게 될 것이다
빵틀에서 빵찍어내듯이 만들어지는 개체..메모리가 다 떨어질때까지
만들어 질 것이다



***[LOG-IN]***

이런 질문이 있었다
자식폼을 AddOwendForm 메소드를 사용하지
않아도 되는데 ..뭐가 다른 가요???라는 질문이 있었다

Me.AddOwnedForm(oChildForm)
oChildForm.Show()

즉 Me.AdOwnedForm메소드를 지워도 자식폼이 뜨는데..뭐가
다르냐는 이야기..
AddOwnedForm없이 띄우면 방법은 두개를 다 띄워놓고 부모폼의 최소화(Minimize)버튼을 크릭하여 보시면
자식폼도 같이 작아진다
한마디로 자식폼은 부모폼이 움직임에 같이 통제를 받고
자식폼은 항상 부모폼의 위에 띄워지게 된다
항상 위에 띄워지게 하려면 ShowDialog로 열어야 하지만
AddOwnedForm으로 하면 ShowDialog와 같은 효과를 갖는다
그래서 부모폼을 선택해도 자식폼은 항상 위에 위치한다