두개의 폼에서 서로 다른 폼을 사용하거나 정보를 전달하고 받아들이는 과정을 소개한다. 두개의 폼을 만들고 각각에 TextBox1, TextBox2, Button1을 만든다. 폼을 추가하는 방법은 아시겠지...(메뉴/프로젝트/Windows Form 추가)
[예제1] Form1에서 Button1을 누르면 Form2가 보여진다.
'Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim NewForm As New Form2()
NewForm.Show()
End Sub
이 예에서 계속 Form1의 Button1을 누르면 새로운 Form2가 계속 보여진다. Form2가 있는 상태에서 Form1에서 다른 작업을 할 수도 있다.
[예제2] Form1에서 Button1을 누르면 Form2가 보여진다. Form2가 보여지는 동안 Form1에서 작업할 수 없다. Form2에서 Button1을 누르면 Form2가 닫힌다.
'Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim NewForm As New Form2()
NewForm.ShowDialog()
End Sub
'Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
[예제3] 위와 같은 설정에 추가하여 Form2의 TextBox2에 Form1의 TextBox1의 내용이 적어지도록 한다. 만약 Form2에서 TextBox2의 내용을 수정한 후 Button1을 눌러 닫으면 Form1의 TextBox1의 내용도 같이 변경되도록 해 보자.
'Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = "정보 전달 시험"
Dim NewForm As New Form2()
NewForm.TextBox2.Text = Me.TextBox1.Text
NewForm.ShowDialog()
TextBox1.Text = NewForm.Message
End Sub
'Public Class Form2
Public Message As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Message = Me.TextBox2.Text
Me.Close()
End Sub
Form2에서 전역변수 Public 으로 선언한 Message라는 변수는 다른 폼에서도 사용할 수 있다. Form2가 닫힐 때 Message에 값을 넣어 두었으므로 Form1에서 그 값을 불러서 사용할 수 있는 것이다. Dim이나 Private로 선언한 전역변수는 그 폼에서만 사용할 수 있지만 Public 으로 선언하면 다른 폼에서도 사용할 수 있게 된다.
[예제4] 그렇다면 다른 폼에 있는 프로시져나 함수도 사용할 수 있을까?
'Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Dia As Double = 100
Dim NewForm As New Form2()
TextBox1.Text = NewForm.Area_Circle(Dia)
End Sub
'Public Class Form2
Public Function Area_Circle(ByVal Diameter As Double) As Double
Dim PI As Double = Math.PI
Area_Circle = PI / 4 * Diameter ^ 1
End Function
이 예제에서 Form2는 보여지지도 않았고 Public으로 선언한 변수도 없지만 Form2에서 Public으로 선언한 함수를 이용하여 계산하는 방법을 알 수 있다. 위와 같은 원의 면적을 계산하는 함수는 어딘가 모아두고 필요할 때 위와 같은 방법으로 사용하면 편리할 것이다.
이런 목적이라면 폼 대신 클래스를 사용하는 것이 좋다. 클래스는 폼과 마찬가지이지만 눈에 보이는 폼이 없다. 클래스를 불러오려면 [메뉴/프로젝트/클래스추가]. 아래의 예는 폼대신 클래스를 사용한 방법을 보여주고 있다.
'Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Dia As Double = 100
Dim CL As New Class1()
TextBox1.Text = CL.Area_Circle(Dia)
End Sub
'Class1
Public Function Area_Circle(ByVal Diameter As Double) As Double
Dim PI As Double = Math.PI
Area_Circle = PI / 4 * Diameter ^ 1
End Function
클래스를 잘 활용하면 코드를 만드는 노력이 줄어들고 깔끔하게 처리할 수 있으므로 명심해 두어야 한다.