Silverlight를 설치하려면 여기를 클릭합니다.*
Korea 대한민국변경|Microsoft 전체 사이트
MSDN
|개발자 센터
MSDN Home   MSDN Home
MSDN 홈 > MSDN Magazine > 2001년 기사 > Visual Basic.NET에서의 Windows Forms

Visual Basic.NET에서의 Windows Forms


Visual Basic.NET은 웹 서비스 및 상속성 기능, 기타 많은 새로운 언어 기능, 그리고 Microsoft® .NET Framework에 대한 지원 및 다른 많은 이유들로 인해 개발 부문에서 많은 대화의 주제가 되고 있습니다. 이 모든 이야기들이 과연 무엇에 관한 것인지를 보여주기 위해 이번 달에는 Viusal Basic.NET에 대해 이야기해 보겠습니다.

원래 개발자들이 새로운 언어로 가장 먼저 하는 일은 Hello World 프로그램을 만드는 것입니다. 먼저 이 간단한 일을 하는 것으로 시작한 다음, Windows® Forms를 사용하여 응용 프로그램에서 사용할 수 있는 Windows Forms의 실용적인 기능을 설명하도록 하겠습니다. 또한 Visual Basic® 6.0과 Visual Basic.NET의 폼 간의 몇 가지 차이점을 설명할 것입니다. 말할 것도 없이 Visual Basic.NET으로 응용 프로그램을 만드는 과정에는 몇 가지 작은 놀라움이 있습니다.

맨 위로


Form1 작성

Visual Basic을 시작하면 Visual Studio® 홈 페이지가 나타납니다(그림?1참조). 새 Windows Forms 프로젝트를 시작하려면 Create New Project 링크를 누릅니다. New Project Wizard가 나타납니다. 그런 다음 Visual Basic Projects 폴더를 선택하고 Windows Application 아이콘을 누릅니다. 절차를 완료하려면 Name 필드에 새 프로젝트의 이름을 입력하고 Open을 누릅니다. 첫 번째 예제 프로젝트의 이름은 HelloNetWorld입니다.

Figure 1 Visual Studio Home Page
그림 1 Visual Studio 홈 페이지

New Project Wizard를 종료하면 Form1.vb라는 새로운 폼이 나타납니다. 확장명이 old.frm에서 .vb로 대체된 것을 제외하면 이전 버전의 Visual Basic과 같습니다. 현재로서는 프로젝트에 있는 References 폴더는 무시합니다.

Hello World 응용 프로그램 작성에서 가장 먼저 해야 할 일은 인터페이스에 대한 텍스트를 포함하는 일정한 종류의 컨트롤을 추가하는 것입니다. 컨트롤은 아시다시피 도구 상자에 있습니다. Visual Studio 구성을 기본 설정으로 선택한 경우 도구 상자는 Visual Studio 인터페이스의 왼쪽 측면에 숨겨집니다. Viusal InterDev® 또는 Visual Studio 6.0 IDE에서 실행되는 다른 도구들을 사용해 온 개발자들은 여러 가지 기능들이 Visual Studio 6.0과 비슷하기 때문에 Visual Basic.NET 인터페이스가 낯설지 않을 것입니다. 도구 상자를 액세스하려면 마우스를 도구 상자 쪽으로 옮기고 몇 초 간 기다립니다. 도구 상자가 오른 쪽으로 확장됩니다. 폼에 대한 컨트롤을 선택하려면 도구 상자의 Windows Forms 섹션이 표시되어 있어야 합니다.

첫 번째 예제의 경우, Label 컨트롤을 선택하고 이것을 폼에 끌어다 놓습니다. 레이블이 강조되며 Properties 창에서 Text 가 선택됩니다. "Hello World"를 입력하고 Enter 키를 누르면 Text 속성에 텍스트가 표시됩니다. 컨트롤을 끌어서 놓은 뒤 컨트롤의 기본 속성이 Text로 되어 있을 경우 바로 입력을 시작할 수 있기 때문에 이 컨트롤 동작은 매우 쓸 만한 것입니다.(Text 속성을 말하면서 부연하고 싶은 것은 컨트롤에서의 기본 표시 텍스트 속성의 일관성을 유지하도록 레이블 및 명령 단추와 같은 이전 버전 Visual Basic 컨트롤의 Caption 속성이 Text로 변경되었다는 것입니다.) 또한 이전 버전 Visual Basic에서와 마찬가지로 컨트롤을 선택한 다음 컨트롤을 끌어옴으로써 컨트롤을 위치시킬 수 있습니다.

Figure 2 New Hello World Form
그림 2 새로운 Hello World

이 시점에서 F5 키를 눌러 프로젝트를 실행하고 새로운 폼을 표시할 수 있습니다. 새 폼의 모습은 그림?2와 같습니다. 이 모든 것이 Visual Basic 6.0에서의 폼 작성과 크게 다르지 않기 때문에, 프로젝트를 신속하게 준비하고 실행할 수 있을 것입니다.

맨 위로


두 번째 폼의 추가

간단한 응용 프로그램을 실행하고 있으므로 이제 좀더 깊이 들어갈 때입니다. Visual Basic 6.0에서와 비슷한 방식으로 프로젝트에 두 번째 폼을 추가할 수 있습니다. 먼저 Solution Explorer에서 프로젝트 이름을 마우스 오른쪽 단추로 누릅니다. 그런 다음 컨텍스트 메뉴에서 Add...을 선택하고 Add Windows Form을 선택합니다. 선택된 Windows Forms와 함께 Add New Item 대화 상자가 표시됩니다. Open을 눌러 기본 이름을 Form2.vb로 지정합니다. 폼에 레이블 컨트롤을 추가하고 Text 속성을 "Hello World 2"로 설정합니다.

이러한 폼에 링크를 만들어 사용자가 Form1에서 Form2를 표시할 수 있다면 멋지지 않겠습니까? Visual Basic 6.0과 이전 버전에서는 단추에 연결된 form1.show를 사용하여 form1을 표시할 수 있었습니다. 그러나 구문이 변경되었기 때문에 Visual Basic.NET에서는 이렇게 할 수 없습니다. 이것을 확인하려면 Form Designer의 왼쪽 상단에서 Form1.vb [Design]*을 눌러서 디자인 보기에 Form1을 표시합니다. 그런 다음 도구 상자에서 Form1에 명령 단추를 추가합니다. 단추의 이름 속성을 cmdForm2로 설정하고 Text 속성을 "Show Form2"로 설정합니다. 텍스트를 모두 표시하려면 단추를 넓혀야 하는데, 핸들을 끌거나 Width 속성을 설정하면 됩니다. Width와 같은 일부 속성들은 다른 속성의 하위 속성입니다. 예를 들어 Width를 설정하려면 Size 속성을 확장해야 합니다. 또한 Location 속성에는 Left와 Top 속성을 대체하는 X와 Y 속성이 포함되어 있습니다.

이제 새로운 명령 단추를 사용하여 Form2를 표시해 보도록 하겠습니다. 단추를 두 번 눌러 Click 이벤트 코드를 엽니다. 일단 다른 코드는 무시하고, 커서가 cmdForm2_Click 프로시저에 있도록 합니다. 다른 폼을 표시하는 첫 번째 단계는 다른 폼에 대한 참조를 만드는 것입니다. 다음과 같이 Form2를 참조하는 변수를 만들면 됩니다.
Dim frmForm2 As Form2 = New Form2()
이 명령문은 Form2의 변수를 만듭니다. 구성 요소에 대한 참조를 만드는 것과 같은 방식으로 Form2 개체에 대한 참조를 만듭니다. 코드의 폼을 참조할 경우 폼의 한 인스턴스에 대한 참조 변수를 사용합니다. New 운영자는 처음 액세스할 때 Visual Basic에서 폼의 인스턴스를 만들도록 합니다. 폼을 표시하기 위해 다음과 같이 폼의 Show 메서드를 호출할 수 있습니다.
frmForm2.Show()
이제 F5 키를 눌러 프로젝트를 실행합니다. Form1에 위치시킨 단추를 누르면 첫 번째 폼에서 Form2를 표시할 수 있습니다.

Visual Basic 프로젝트에서 Windows Forms를 사용하는 것은 지금까지는 기존의 Visual Basic 기반 폼과 크게 다르지 않습니다. 지금부터는 .NET에 의해 액세스되는 모든 것(UI 요소에서 XML 문서까지)은 하나의 개체로 표시된다는 사실을 이해할 필요가 있습니다. 많은 개발자들에게는 이는 큰 변화로 받아들여질 것인데, 개체를 사용하기 전에 개체에 대한 참조를 만들어야 하므로 폼과 같은 기능을 사용하는 약간 달라진 새 방식을 배울 필요가 있습니다. Visual Basic 6.0 및 이전 버전에서 폼은 자동으로 참조되기 때문에 이 단계를 수행할 필요가 없었습니다.

폼들은 이제 클래스이므로, 폼의 작동 방법을 제어하는 많은 새로운 힘을 갖게 됩니다. CalcLt 프로시저와 같은 새로운 프로시저를 정의하는 것만으로 폼에 메서드를 추가할 수 있습니다.
Public Function CalcIt(ByVal x As Integer, ByVal y As Integer) _
As Integer
    CalcIt = x * y
End Function 
또한 공용 변수를 정의함으로써 폼에 속성을 추가할 수 있습니다.
Public MyResult As Integer
이제 코드의 메서드나 속성을 폼의 내장 메서드나 속성인 것처럼 액세스할 수 있습니다. 예를 들어 이 명령문을 다른 폼이나 클래스에서 사용함으로써 MyResult 데이터 번호를 설정할 수 있습니다.
frmForm1.MyResult = 29


맨 위로


폼 클래스

Form1으로 돌아가서 어떤 일이 진행되고 있는지 살펴보겠습니다. Form1을 마우스로 더블 클릭해서 코드를 표시합니다. 코드 창 위쪽으로 가서 Imports 정의를 봅니다. 이러한 기본 Import 문은 폼과 구성 요소를 만드는 데 사용되는 여러 시스템 클래스로부터 이름 공간을 가져옵니다. 특히 System.WinForms에는 필자가 폼을 만드는 데 사용하려고 하는 Form 클래스가 들어 있습니다. 예제 프로젝트(폼에 앞서 말한 컨트롤을 추가한 후)의 기본 Import 문은 다음과 같습니다.
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
폼의 나머지 코드는 Form 클래스의 일부입니다. 각 폼 코드에는 폼을 정의하는 Class 문이 들어 있습니다.
Public Class Form1
다음으로 Inherits 문은 WinForms.Form 클래스를 상속하여 폼의 기초를 만듭니다.
Inherits System.WinForms.Form
이제 새 폼은 WinForms.Form 클래스에 기반하고 있으므로 어떻게 행동해야 하는지 알고 있습니다. Inherits 문을 설명하고 프로젝트를 컴파일하거나 실행해 보면 새 폼이 작동하는 방식을 볼 수 있습니다. 상속된 클래스에 기반하는 폼의 속성이나 메서드를 참조하면 다음과 같은 컴파일 오류를 일으킬 수 있습니다.
C:\ProjectsVB.Net\HelloNetWorld\HelloNetWorld\Form1.vb(58): 
The name 'Text' is not a member of 'HelloNetWorld.Form1'.
이 오류는 라인 58에서 Form1.Text 속성이 이 폼의 일부가 아니라는 것을 말해 줍니다. 이는 폼의 Text 속성이 상속되며 실제로는 System.WinForms.Form의 일부이기 때문입니다.

폼 코드의 다음 부분은 New Sub 프로시저입니다. 이 프로시저는 폼의 생성자이며 이전 버전의 Visual Basic에 의해 지원되는 Form_Initialize 및 Form_Load 이벤트를 대체합니다. Form1의 기본 New 프로시저는 다음과 같습니다.
Public Sub New()
    MyBase.New
    Form1 = Me
    'This call is required by the Windows Forms designer.
    InitializeComponent

    'TODO: Add any initialization after 
    'the InitializeComponent() call
End Sub
New 프로시저의 처음 세 명령문은 폼을 초기화합니다. 초기화 코드는 프로시저 끝에 있는 TODO 문을 따라가야 합니다.

Dispose 프로시저 정의는 베이스 클래스인 MyBase에서 기본 Dispose 메서드를 다시 정의합니다. 이를 통해 폼은 베이스 클래스와 구성 요소 클래스를 모두 제거하는 자체적인 베이스 프로시저를 만들 수 있습니다.
Overrides Public Sub Dispose()
    MyBase.Dispose
    components.Dispose
End Sub 
Windows Forms 설계자는 폼의 마지막 프로시저(Dispose) 다음 부분을 코드로 사용합니다. 이곳은 폼 설계자가 폼과의 상호 작용 결과인 코드를 집어넣는 장소입니다. 이 섹션은 #Region 태그로 시작합니다.
#Region " Windows Form Designer generated code "
코드의 그 다음 몇 줄은 폼이 사용하는 다양한 클래스들에 대한 참조를 정의합니다. 필자의 레이블과 단추 컨트롤이 여기 참조되어 있다는 점에 주의하십시오.
'Required by the Windows Forms designer
Private components As System.ComponentModel.Container
Private WithEvents cmdForm2 As System.WinForms.Button
Private WithEvents Label1 As System.WinForms.Label
Dim WithEvents Form1 As System.WinForms.Form
컨트롤과 Form1은 폼에 각 클래스 이벤트를 표시하도록 WithEvents로 정의되어 있습니다.

코드의 다음 부분은 InitializeComponent 프로시저 정의입니다(그림?3 참조). 이 프로시저는 폼과 해당 폼의 다양한 구성 요소들을 초기화합니다. 코드에 표시되어 있는 대로, 코드 편집기가 아니라 폼 설계자를 사용해서 폼을 수정해야 합니다. InitializeComponent에는 폼 설계자를 사용하여 수정한 모든 속성을 설정하는 코드가 들어 있다는 점을 유의하십시오. 코드의 마지막 두 라인은 폼 컨트롤 컬렉션에 컨트롤을 추가합니다. 이 프로시저는 컨트롤을 프로그램적으로 어떻게 만들고 사용할 수 있는지를 보여주기 때문에 예제 코드의 유용한 부분입니다. 이 프로시저에서 코드를 복사해서 다른 폼에서 사용할 수 있습니다. 폼 설계자가 코드를 폼에 추가하는 방식은 GUI의 마술이 작동하도록 할 뿐만 아니라, 마술의 장막 너머에서 무슨 일이 일어나는지 볼 수 있게 해 줍니다.

Visual Studio 편집기는 GUI 및 코드와 함께 작동할 수 있도록 잘 설계되었습니다. 그림?4는 Form1의 코드가 표시된 상태에서의 Visusal Studio 인터페이스를 보여줍니다. 편집기의 한 가지 멋진 기능은 코드 섹션을 확장하고 축소할 수 있는 기능으로서 특정 섹션에 집중하고자 할 때 배경의 일부를 제거할 수 있도록 해 줍니다. 그림?4에서 InitializeComponent의 정의가 어떻게 왼쪽에 + 기호를, 오른쪽에는 줄임표(…)을 갖고 있는지에 주목합니다. 이는 전체 정의가 축소되었음을 나타냅니다. + 기호를 눌러 이 코드를 확대하거나 코드가 나타나면 표시되는 - 기호를 사용하여 코드를 숨길 수 있습니다.

마지막으로 다음 명령문은 폼 설계자에 속하는 영역을 종료합니다.
#End Region
Form1에서 정의된 마지막 프로시저는 명령 단추 cmdForm2 클릭 이벤트입니다. 이 코드는 Form2를 표시합니다.
Protected Sub cmdForm2_Click(ByVal sender As Object, _
                             ByVal e As System.EventArgs)
    Dim frmForm2 As Form2 = New Form2()
    frmForm2.Show()
End Sub
폼의 마지막 명령문은 클래스 정의를 종료하는 End Class 문입니다.

End Class

맨 위로


결론

.NET 플랫폼의 Windows Forms는 개발자들에게 비교할 수 없는 기회를 제공합니다. 이 컬럼의 간단한 예제를 통해 알 수 있듯, Windows Forms는 사용하기 편리하고 응용 프로그램의 또 다른 개체로서, 폼을 사용하고 속성 및 메서드와 같은 기능들을 폼에 추가하는 것을 쉽게 만들어줍니다. 또한 같은 이유로 많은 폼과 컨트롤 기능을 쉽게 자동화할 수 있습니다. 또한 Windows Forms는 일반적(.NET 내부에서)이기 때문에 Visual Basic 또는 C#에서 폼을 쉽게 만들 수 있고, 해당 폼을 .NET을 지원하는 모든 언어에서 쉽게 사용할 수 있습니다.

다양한 컨트롤의 속성을 살펴보면 극적인 변화들을 감지할 수 있을 것입니다. 이 변화들은 앞으로의 컬럼에서 설명할 것이며, 그 변화들이 응용 프로그램에서 어떻게 사용될 수 있는지 알게 될 것입니다. 다음 달에 필자는 Windows Forms를 다시 한 번 다룰 것이며, 응용 프로그램에 대한 공통 GUI 요소들을 제공하는 강력한 새로운 기능인 폼 상속에 대해 설명할 계획입니다.

다음 주소로 질문과 의견을 보내주십시오: serving@microsoft.com?

Ken Spencer는 고품질 개발자 코스웨어를 생산하는 32X Tech Corporation(http://www.32x.com/?)에서 일하고 있습니다. 그는 또한 개인 강좌를 통한 컨설팅과 강의에도 많은 시간을 할애하고 있습니다.

? 최종수정일: 2001년 4월 26일
Top of Page Top of Page


Microsoft