본문 바로가기
개발언어/C#

[C#] (강의) 1.Forms 개요2

by 창용이랑 2021. 4. 12.
728x90

m.cafe.daum.net/smbitpro/R7EG/2

 

1.Form개요2

MyFirstForm 만들기(Visual Studio 2008 사용) 이번에는 Visual Studio 2008을 사용하여 MyFirstForm을 만들어 보도록 하자. 먼저, Visual Studio 2008을 실행하고 새로운 프로젝트를 생성한다. (단축키는 Ctrl+Shift+N) 새

m.cafe.daum.net

MyFirstForm 만들기(Visual Studio 2008 사용)

이번에는 Visual Studio 2008을 사용하여 MyFirstForm을 만들어 보도록 하자.

 

먼저, Visual Studio 2008을 실행하고 새로운 프로젝트를 생성한다. (단축키는 Ctrl+Shift+N)

 

 

 

 

새 프로젝트 창이 뜨면 프로젝트 형식은 Visual C#형식을 선택하고 프로젝트 템플릿은 Windows Forms 응용 프로그램 템플릿을 선택한다. 그리고, 원하는 폴더를 선택한 후 원하는 프로젝트 명을 기입하도록 하자. 여기서는 MyFirstForm이라 명명하도록 하겠다.

 

 

 

프로젝트를 생성하면 다음과 비슷한 화면이 나올 것이다. 메인 메뉴에서 보기 메뉴를 선택하여 솔루션 탐색기나 속성 창, 도구 상자 등을 작업 영역에 추가할 수 있다.

솔루션 창(1)에는 현재 솔루션에 속하는 프로젝트들과 각 프로젝트를 구성하는 요소들로 이루어져 있다. 그리고, 프로젝트를 구성하는 요소를 선택하면 이에 대한 작업을 할 수 있는 창(2)이 보인다. 속성이나 이벤트 등을 설정하기 용이하게 하기 위해 속성 창(3)이 있고 폼을 손 쉽게 구성할 수 있도록 도구 상자가 있다.

 

 

속성창에서 

을 선택하면 속성 목록이 보이고 

를 선택하면 이벤트 목록이 보인다.

많은 응용 작업을 할 때 속성 창은 많은 개발자 편의성을 제공하여 개발 비용을 단축 시켜줄 것이다.

 

 

 

 

기본적으로 만들어지는 소스에 대한 설명을 해 보자. Program.cs 파일에는 응용 프로그램 진입점 클래스와 진입점인 Main메서드가 작성되어 있다.

먼저 [STAThread] 어튜리뷰트는 COM 형식을 사용하는 경우에 의미가 있는데 이를 설정하면 런타임 엔진에게 단일 스레드 아파트먼트 모델을 사용한다는 사실을 통보하게 된다. 이에 대한 설명은 여기에서는 생략하도록 하겠다.

앞서 메모장으로 작성할 때 Application.Run메서드에 생성한 폼 개체를 집어넣었는데 이에 대한 부분이 여기서도 동일하다. 단지, 이전에는 Form클래스 개체를 넣었고 여기서는 Form클래스에서부터 파생된 Form1클래스 개체를 넣었다는 차이가 있다.

그리고, Application.EnableVisualStyles()은 운영체제가 지원하는 경우 컨트롤을 비쥬얼 스타일로 해 주는 코드이다. 여기에서 이에 대한 설명은 큰 의미를 지니지 않는다.

또한,Application.SetCompatibleTextRenderingDefault(false)도 폼 내에 컨트롤의 UseCompatibleTextRenderingValue 속성을 응용의 기본값으로 설정해 주는 코드인데 이에 대한 설명도 여기에서는 큰 의미를 지니지 않는다.

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

 

namespace MyFirstForm

{

    static class Program

    {

        /// <summary>

        /// 해당 응용 프로그램의 주 진입점입니다.

        /// </summary>

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new Form1());

        }

    }

}

 

Form1에 대한 코드는 Form1.cs Form1.Designer.cs로 분리되어 있다.

Form1.cs에는 개발자가 각 이벤트에 대한 로직들을 작성하기 위한 부분이고 Form1.Designer.cs는 개발도구에서 폼을 디자인한 내용이 자동화 되어 작성되는 부분이다. 물론, 개발자가 직접 Form1.cs Form1.Designer.cs에 코드를 작성한다고 해서 문제가 되지 않는다.  다만, 응용을 개발함에 있어서 논리적인 부분과 시각적인 부분을 분리시킴으로써 개발자가 논리적인 작업에 많은 에너지를 투입할 수 있게 하기 위한 배려이다.

 

Form1.cs에는 Form1생성자 메서드가 있고 생성자 메서드 내부에는 InitializeComponent();메서드 호출구문만이 존재한다. InitializeComponent()의 정의는 Form1.Designer.cs에 있다.

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

namespace MyFirstForm

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

    }

}

 

Form1.Designer.cs에는 Form1클래스 기반의 개체가 소멸할 때 자원을 소멸하기 위한 Dispose 메서드가 정의되어 있고 Form1.cs의 생성자에서 호출한 InitializeComponent()메서드에 대한 정의가 있다. InitializeComponent()메서드에는 Form1을 생성하면서 구성할 내용들이 들어가 있다. 우리가 속성창을 이용하여 속성이나 이벤트를 변경하면 이부분에 코드가 변경됨을 알 수가 있다.

여러분은 앞선 예 처럼 Form1의 배경색을 원하는 색으로 변경하고 캡션명도 원하는 값으로 변경해 보라. 또한, Form1에 마우스를 클릭하면 메시지 창이 뜨는 형태로 변경해 보길 바란다.

 

namespace MyFirstForm

{

    partial class Form1

    {

        /// <summary>

        /// 필수 디자이너 변수입니다.

        /// </summary>

        private System.ComponentModel.IContainer components = null;

 

        /// <summary>

        /// 사용 중인 모든 리소스를 정리합니다.

        /// </summary>

        /// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>

        protected override void Dispose(bool disposing)

        {

            if (disposing && (components != null))

            {

                components.Dispose();

            }

            base.Dispose(disposing);

        }

 

        #region Windows Form 디자이너에서 생성한 코드

 

        /// <summary>

        /// 디자이너 지원에 필요한 메서드입니다.

        /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.

        /// </summary>

        private void InitializeComponent()

        {

            this.components = new System.ComponentModel.Container();

            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

            this.Text = "Form1";

        }

 

        #endregion

    }

}