윈폼애플리케이션 폼클래스 컨트롤클래스 [2/67]
통합개발환경시작하기 소스코드보기 윈폼애플리케이션작성하기 [3/67]
윈폼애플리케이션 컨트롤을사용하여프로그래머가원하는화면을구성하고이벤트가발생했을때처리하고자하는작업을이벤트처리기에기술하는방식으로프로그래밍된프로그램. 윈도우폼에컨트롤또는컴포넌트를배치하고이벤트처리기를등록하여사용자의다양한요구를입력으로받아처리한후실행결과를응답해주는방식으로작동. [4/67]
윈도우폼 단순히폼이라고부름. 운영체제에서제공하는기본적인화면단위인창을말하는개념. 사각형모양의작은화면영역을의미사용자에게정보를제공하고사용자가입력하는자료를받음. [5/67]
폼클래스 윈도우폼을나타내는클래스. System.Windows.Forms 네임스페이스속함. 컴포넌트클래스 컨트롤클래스의베이스클래스이며화면에직접적으로나타나지않으나개념적인부분을나타내는클래스. 컨트롤클래스 폼에직접표시되는컨트롤을위한클래스. [6/67]
1. 새프로젝트시작 파일 (F) 새로만들기 (N) 프로젝트 (P) 를선택. 프로젝트형식 (P) Visual C# 프로젝트 그리고 템플릿 (T) Windows 응용프로그램 을선택. [7/67]
윈도우폼디자이너 솔루션탐색기 도구상자 속성브라우저 [8/67]
윈도우폼디자이너폼의크기를조정하고폼에컨트롤을배치하고배치된컨트롤의위치와크기를수정할수있는영역. 도구상자폼에배치할수있는컨트롤과컴포넌트의목록을보여주는곳 속성브라우저폼디자이너에서선택한폼이나컴포넌트의프로퍼티와이벤트목록을보여주는곳 솔루션탐색기응용프로그램을구성하고있는파일과관렦항목을보여주는곳현재응용프로그램에새폼이나파일을추가하거나또는존재하는파일이나항목을삭제할때사용 [9/67]
속성브라우저 [10/67]
생성된프로젝트의파일 App.ico : 응용프로그램에서사용되는기본아이콘에대한파일 AssemblyInfo.cs : 프로젝트가생성하는어셈블리를설명하고버젂관리정보를지정하는데사용하며, 애트리뷰트정의를포함하는 C# 소스파일 Form1.cs : 응용프로그램의 C# 소스파일 Form1.resx : Form1.cs 파일과관렦된리소스정보를저장하는 XML 파일 WindowsApplication1.csproj : Visual C# 프로젝트파일 WindowsApplication1.csproj.user : 사용자정의설정을포함하는 Visual C# 프로젝트파일 WindowsApplication1.suo : 사용자정의정보를포함하는 Visual C# 솔루션파일 [11/67]
public class Form1 : System.Windows.Forms.Form { // 필드항목선언 public Form1() { InitializeComponent(); // 컴포넌트초기화 // 기타멤버초기화 } protected override void Dispose(bool disposing) { // 사용중인리소스를정리 } private void InitializeComponent() { // 클래스에서사용하는컴포넌트초기화 } static void Main() { Application.Run(new Form1()); } } // --- 2 // --- 4 // --- 3 // --- 1 [12/67]
1 Main() 메소드 응용프로그램의시작점 Application 클래스의 Run() 메소드를호출하여응용프로그램을실행. 2 생성자 폼에서사용하는각종컴포넌트와클래스의멤버초기화 3 InitializeComponent() 메소드 폼에있는각종컴포넌트들초기화 4 Dispose() 메소드 응용프로그램이종료될때실행 응용프로그램이사용한모든리소스를해제. [13/67]
폼설계컴포넌트프로퍼티멤버이벤트처리기애플리케이션실행 [14/67]
[ 예제 7.1 DisplayStartDateApp.cs] 1) 폼설계 2) 프로퍼티 컨트롤 : (Name) 프로퍼티값 Form : Form1 Text DisplayStartDateApp Button : button1 Text Display 3) 멤버 public Form1() { //... startdatetime = DateTime.Now; } DateTime startdatetime; public DateTime GetStartDateTime() { return startdatetime; } [15/67]
4) 이벤트처리기 컨트롤 : (Name) 이벤트메소드명 Button : button1 Click button1_ Click() private void button1_click(object sender, EventArgs e) { MessageBox.Show(GetStartDateTime().ToString()); } 실행방법 : 애플리케이션을실행한후, 폼에있는 "Display" 버튼을클릭한다. 실행결과 : [16/67]
폼설계 폼에컨트롤을배치한모습표시. 폼에배치되는컨트롤의종류와배치된컨트롤의이름과위치를그림형태로표시. 노란색텍스트상자는 "ClassType : Name" 형식으로표시 컨트롤의종류 ( 클래스이름 ) 와이름 ( 객체이름 ) 을나타냄. 컨트롤의추가 [17/67]
컴포넌트목록 컨트롤 : (Name) 프로퍼티값 Timer : timer1 Images FLGSKOR.ICO 컴포넌트추가 컨트롤추가와유사 [18/67]
프로퍼티목록 컨트롤 : (Name) 프로퍼티 값 Form : Form1 Text DisplayStartDateApp Button : button1 Text Display 프로퍼티값변경 속성브라우저를이용. [19/67]
멤버 컴포넌트와컨트롤을제외한클래스멤버에대한선언과초기화등을소스코드로작성하는곳. 멤버코드추가 생성자에초기화부분추가 public Form1(){ } // Windows Form 디자이너지원에필요합니다. // InitializeComponent(); // TODO: InitializeComponent 를호출한다음생성자코드를추가합니다. // startdatetime = DateTime.Now; 멤버선언이나메소드등의소스코드추가 폼클래스내의적당한곳에추가. [20/67]
이벤트처리기 통합환경에서생성하는처리기의이름 < 이벤트처리기를등록하려는객체의이름 >_< 이벤트이름 > 컨트롤 : (Name) 이벤트 메소드명 Button : button1 Click button1_ Click() private void button1_click(object sender, EventArgs e) { MessageBox.Show(GetStartDateTime().ToString()); } 매개변수 이벤트를발생시킨객체이벤트에관렦된정보를가짂객체 EventArgs 클래스형이나이의파생클래스형 [21/67]
이벤트처리기등록방법 1 이벤트처리기를등록하고자하는폼이나컨트롤을선택. 2 속성브라우저에서 " 이벤트 " 버튼을클릭. 3 목록에서처리기를등록하고자하는이벤트를더블클릭 4 소스코드편집창에서이벤트처리기의내용을입력 [22/67]
컴파일과실행 컴파일하는방법 메인메뉴를통하여 빌드 (B) 솔루션빌드 (B) 를선택 컴파일한후바로실행하는방법 디버그 (D) 시작 (S) 이나 디버그 (D) 디버깅하지않고시작 (G) 을선택 실행방법 : 애플리케이션을실행한후, 폼에있는 "Display" 버튼을클릭한다. 실행결과 : [23/67]
폼클래스 Form 클래스를나타냄. 폼의외형을설정하는프로퍼티, 폼의동작을정의하는메소드, 그리고사용자와상호작용을처리하는이벤트등이정의되어있는클래스 윈도우폼을다루는핵심클래스로윈도우폼을사용하는모든클래스의베이스클래스. using System.Windows.Forms; public class UserDefinedForm : Form { // 새클래스멤버정의 // Form 클래스의멤버재정의 } [24/67]
폼클래스 윈도우폼을사용하는모든클래스의베이스클래스 System.Windows.Forms 네임스페이스에포함 [25/67]
Component 클래스.NET 프레임워크에서컴포넌트기반프로그래밍기법에서의컴포넌트개념을지원하는클래스 System.ComponentModel 네임스페이스에포함윈폼애플리케이션뿐만아니라컴포넌트개념이필요한다른곳에서도사용윈폼에서제공하는화면을구성하는여러요소뿐만아니라화면에표시되지않는요소도컴포넌트로표현. Control 클래스윈폼애플리케이션에서화면에표시되는구성요소를나타내기위해서사용되는컨트롤들의베이스클래스폼과폼에배치되는여러요소에서공통적으로필요한멤버를정의 ScrollableControl 클래스스크롤개념이필요한컨트롤을정의하기위해서사용되는베이스클래스 ContainerControl 클래스여러컨트롤이나컴포넌트를포함할수있는컨트롤에서의포커스관리를하기위한베이스클래스 [26/67]
InitializeComponent() 메소드 폼에있는각종컴포넌트들을초기화 통합개발환경이관리하는메소드 Form 클래스의자체정의멤버 Control 클래스의멤버 [27/67]
주요프로퍼티 프로퍼티 설명 FormBorderStyle 폼의테두리모양을설정하거나참조. StartPosition 폼이처음나타나는위치를설정하거나참조 [28/67]
용도 형식 폼의테두리모양을설정하는프로퍼티 public FormBorderStyle FormBorderStyle {get; set;} FormBorderStyle 열거형 기호상수 None FixedSingle Fixed3D FixedDialog 설명테두리가없음고정된단일선테두리고정된 3차원테두리고정된대화상자스타일의굵은테두리 Sizable 크기를조정할수있는테두리 ( 기본값 ) FixedToolWindow SizableToolWindow 크기를조정할수없는도구창테두리 크기를조정할수있는도구창테두리 [29/67]
용도 형식 윈도우폼응용프로그램이실행될때처음나타나는폼의위치를결정하는프로퍼티 public FormStartPosition StartPosition {get; set;} FormStartPosition 열거형 기호상수 CenterParent CenterScreen Manual 설명 폼이해당부모폼의범위내에서가운데에맞춰짂다 폼이현재디스플레이의가운데에맞춰지며크기는해당폼의크기내에서지정된다. 폼의위치는 Location 프로퍼티에의해결정된다 WindowsDefaultLocation 폼의위치는윈도우운영체제가결정한다. WindowsDefaultBounds 폼의위치와크기는윈도우운영체제가결정한다. [30/67]
주요메소드 메소드 설명 Close() 폼을닫는다. Activate() 폼을활성화한다. AddOwnedForm() 다른폼을현재폼에소유시킨다. RemoveOwnedForm() 현재폼에소유된폼을제거한다. SetDesktopBounds() 바탕화면에서폼의범위를설정한다. SetDesktopLocation() 바탕화면에서폼의위치를설정한다. [31/67]
용도 화면에있는폼을닫기위해서사용 형식 public void Close(); 설명 메인폼 (main form) 이닫히는경우에는애플리케이션이종료자식폼 (child form) 이닫히는경우는폼이화면에서사라짐. Close() 메소드는 Closing 이벤트와 Closed 이벤트를발생시킴. [32/67]
용도 폼을활성화하고포커스를주기위해서사용 형식 public void Activate(); [33/67]
용도 SetDesktopBounds() 메소드 바탕화면에서폼이나타날수있는범위를설정할때사용 SetDesktopLocation() 메소드 바탕화면에서폼의위치를정하기위해서사용 형식 void SetDesktopBounds(int x, int y, int width, int height); void SetDesktopLocation(int x, int y); [34/67]
용도 다른폼을소유하거나소유된폼을제거할때 형식 public void AddOwnedForm(Form ownedform); public void RemoveOwnedForm(Form ownedform); 설명 폼 Form1 이폼 Form2 를소유하고있는경우 (Form1.AddOwnedForm(Form2)) Form1 을최소화하거나닫는경우에는 Form2 도같이최소화되거나닫힘. [35/67]
주요이벤트 이벤트 설명 Activated 폼이활성화될때발생한다. Closed 폼이종료된후발행한다. Closing 폼의종료과정중에발생한다. Deactivate 폼이비활성화될때발생한다. Load 폼이로드될때발생한다. [36/67]
용도 Load 이벤트 폼이메모리로로딩될때발생하는이벤트 주로폼에서사용하는자원을할당하고내부구성요소를동적으로초기화하는데사용 Closed 이벤트 폼이닫히면발생하는이벤트 Cancel 프로퍼티 ([ 표 7.6] 참조 ) 의값이거짒일때만발생 [37/67]
[ 예제 7.2 LoadClosedApp.cs] 1) 폼설계 2) 프로퍼티컨트롤 : (Name) 프로퍼티 값 Form : Form1 Text LoadClosedApp 3) 이벤트처리기 컨트롤 : (Name) 이벤트메소드명 Form : Form1 Load Closed private void Form1_Load(object sender, EventArgs e) { MessageBox.Show("This form is loaded"); } private void Form1_Closed(object sender, EventArgs e) { MessageBox.Show("This form is closed"); } Form1_Load() Form1_Closed() [38/67]
실행방법 : 폼을종료하면폼의종료를알리는메시지상자가나타난다. 실행결과 : [39/67]
용도폼이닫히는도중에발생 매개변수 CancelEventArgs 형 Cancel 프로퍼티 : 닫기작업의취소여부를설정. 설명 Cancel 프로퍼티는닫기작업의취소여부를결정하기위해사용예문서편집기에서작업중인문서를저장하지않고종료현재작업중인문서를저장하고종료할지, 저장하지않고종료할지, 또는종료작업을취소할지여부를사용자에게물어보는대화상자를표시대화상자에서종료작업에대한취소를선택하면프로그램종료작업은취소 [40/67]
[ 예제 7.3 PromptCloseApp.cs] 1) 폼설계 2) 프로퍼티 컨트롤 : (Name) 프로퍼티 값 Form : Form1 Text PromptCloseApp Button : button1 Dock Fill Text Close 3) 이벤트처리기 컨트롤 : (Name) 이벤트 메소드명 Form : Form1 Closing Form1_Closing() Button : button1 Click button1_click() [41/67]
private void Form1_Closing(object sender, CancelEventArgs e) { if (MessageBox.Show("Do you want to close?", "Prompt, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) e.cancel = false; else e.cancel = true; } private void button1_click(object sender, EventArgs e) { Close(); } 실행방법 : 폼의바탕에있는버튼을누르면, 폼의닫기여부를물어보는대화상자가나타난다. 실행결과 : [42/67]
용도 Activated 이벤트 폼이활성화된직후발생 Deactivate 이벤트 폼이비활성화될때발생 [43/67]
컨트롤클래스 Control 클래스를의미윈폼애플리케이션에서화면에표시되어사용자와상호작용을수행하는컨트롤들을위한베이스클래스폼과폼에배치되는여러컨트롤에서공통적으로필요한멤버들이정의 컴포넌트와컨트롤컴포넌트 : 화면에자싞을그리지않는컴포넌트이미지리스트나타이머등이있음. 폼에표시되지않는컴포넌트는 Component 클래스에서파생된클래스 컨트롤 : 화면에자싞을그릴수있는컴포넌트버튼과레이블, 체크박스등이있음. 폼에표시되는컴포넌트인컨트롤은 Control 클래스에서파생된클래스로정의 [44/67]
System.Windows.Forms 네임스페이스 [45/67]
프로퍼티 설명 Name 컨트롤의이름으로소스파일에서참조할때사용. Text 컨트롤에표시되는문자열을설정하거나참조. Font 컨트롤에표시되는문자열의글꼴을설정. ForeColor 컨트롤에표시되는문자열의글자색을설정. BackColor 컨트롤의배경색을설정. BackGroundImage 컨트롤의배경이미지를설정. Visible 컨트롤의화면표시여부를설정하거나참조. Enabled 컨트롤의활성화여부를설정하거나참조. Size 컨트롤의크기를설정하거나참조. ClientSize 컨트롤에서클라이언트영역의크기. ClientRectangle 컨트롤에서클라이언트영역의위치와크기. Dock 상위컨트롤내에서컨트롤의크기와위치를설정. [46/67]
프로퍼티 설명 Width/Height 컨트롤의폭과높이를설정하거나참조. Location 컨트롤의위치를설정하거나참조. Left/Top 컨트롤의왼쪽과위쪽좌표를설정하거나참조. Right/Bottom 컨트롤의오른쪽 / 아래쪽좌표.( 읽기젂용프로퍼티 ) TabIndex 탭키에의한포커스이동순서를설정. TabStop 탭키에의한포커스설정가능여부를설정. Parent 현재컨트롤이포함된상위컨트롤. Tag 컨트롤에연관된객체를설정하거나참조. Cursor 컨트롤에서사용하는커서를설정하거나참조. ContextMenu 컨트롤에해당하는상황메뉴를설정. [47/67]
용도 컨트롤의이름을나타내는프로퍼티 형식 public string Name { get; set; } [48/67]
용도 컨트롤에표시되는문자열을설정하고자할때사용하는프로퍼티 형식 public string Text { get; set; } 설명 Form 클래스 : 윈도우폼의제목표시줄에나타남. Button 클래스 : 버튼위에값이표시클래스에따라다양한방식으로문자열이표시됨. [49/67]
용도 Enabled 프로퍼티 컨트롤의활성화여부를나타내는프로퍼티 컨트롤이비활성화되면, 컨트롤은회색으로변하며키보드와마우스의입력에반응하지않음. Visible 프로퍼티 컨트롤을화면에표시할지를결정하는프로퍼티 거짒으로설정되면, 해당컨트롤은화면상에서사라짐. 형식 public bool Enabled { get; set; } public bool Visible { get; set; } [50/67]
용도 컨트롤이다른컨트롤에포함되는경우, 자싞을포함하고있는컨트롤을나타내는프로퍼티 형식 public Control Parent {get; set;} [51/67]
용도컨트롤의크기와위치를나타내기위해서사용되는프로퍼티 형식 public int Left { get; set; } public int Right { get; } public int Top { get; set; } public int Bottom { get; } public int Width { get; set; } public int Height { get; set; } public Point Location { get; set; } 설명컨트롤이다른컨트롤에포함되는경우, 컨트롤을포함하고있는상위컨트롤내에서의상대적인위치값 [52/67]
용도 Size 프로퍼티 : 컨트롤의크기를나타내는프로퍼티 ClientSize 프로퍼티 : 클라이언트영역의크기를나타내는프로퍼티 ClientRectangle 프로퍼티 : 클라이언트영역의위치와크기를나타내는프로퍼티형식 public Size Size {get; set;} public Size ClientSize {get; set;} public Rectangle ClientRectangle {get;} 설명클라이언트영역컨트롤자싞을꾸미는데필요한영역을제외한나머지영역을의미예 : 폼클래스 Size 프로퍼티는윈도우폼의젂체크기. ClientSize 프로퍼티는제목표시줄을제외한순수한클라이언트영역의크기. [53/67]
용도 형식 컨트롤을포함하고있는상위컨트롤내에서상대적인위치와크기로설정하기위해서사용되는프로퍼티 public DockStyle Dock { get; set; } DockStyle 열거형 기호상수 설명 None 컨트롤의위치와크기를정하지않음. Top 컨트롤의위치를상위컨트롤내의위쪽에배치. Bottom 컨트롤의위치를상위컨트롤내의아래쪽에배치. Left 컨트롤의위치를상위컨트롤내의왼쪽에배치. Right 컨트롤의위치를상위컨트롤내의오른쪽에배치. Fill 컨트롤의위치를상위컨트롤내의나머지공갂에배치. [54/67]
용도 형식 설명 마우스의커서모양을설정하는프로퍼티 public Cursor Cursor {get; set;} Cursor 클래스는커서를표현하기위해서사용 Cursors 클래스의프로퍼티 : 시스템에서미리정의된커서를나타냄. [55/67]
용도 컨트롤에서사용하는글꼴을설정하는프로퍼티 형식 public Font Font { get; set; } [56/67]
용도 컨트롤에서사용하는배경색과젂경색을나타내는프로퍼티 형식 public Color BackColor { get; set; } public Color ForeColor { get; set; } [57/67]
용도 컨트롤의배경을나타내는프로퍼티 형식 public Image BackGroundImage { get; set; } 설명 폼클래스 선택한이미지의크기가컨트롤의크기보다크다면이미지의일부분만이표시 이미지의크기가컨트롤의크기보다작다면바둑판형식으로반복되어이미지가표시 [58/67]
용도 컨트롤에서마우스오른쪽버튼을누를때나타나는메뉴인팝업메뉴 ( 상황메뉴 ) 를설정하는프로퍼티 형식 public ContextMenu ContextMenu {get; set;} 설명 상황메뉴를정의한후이프로퍼티에배정하면, 팝업메뉴로작동 [59/67]
용도 TabIndex 프로퍼티 탭키를통한포커스를이동할때포커스가이동되는순서를설정하기위해서사용되는프로퍼티 프로퍼티의값이작은컨트롤에서큰컨트롤로이동 TabStop 프로퍼티 탭키에의해포커스이동이필요없을때값을설정하는프로퍼티값이참인경우 : 포커스이동시컨트롤이포커스를가짐. 값이거짒인경우 : 컨트롤이포커스를얻지못함. 형식 public int TabIndex { get; set; } public bool TabStop { get; set; } [60/67]
용도 컨트롤에필요한값을저장한후참조하기위해서사용되는프로퍼티 형식 public object Tag { get; set; } 설명 자료형이 System.Object 클래스형이기때문에,.NET 프레임워크에서사용하는모든값을이프로퍼티에연결해두었다가필요할때사용할수있음. [61/67]
메소드 설명 Show() 컨트롤을화면에표시한다. Hide() 컨트롤을화면에표시하지않는다. Invalidate() 컨트롤의영역을무효화하여다시그려지도록한다. BringToFront() 컨트롤의화면표시순서를가장앞으로변경한다. SendToBack() 컨트롤의화면표시순서를가장뒤로변경한다. PointToClient() 화면상의좌표를컨트롤내부의상대좌표로변환한다. PointToScreen() 컨트롤내부의좌표를화면상의좌표로변환한다. RectangleToClient() 사각형의좌표를컨트롤내부의상대좌표로변환한다. RectangleToScreen() 사각형의좌표를젂체화면상의좌표로변환한다. ResetXxx() Xxx 이름을가짂프로퍼티의값을초기값으로설정한다. [62/67]
Show() 메소드 컨트롤을화면에보이게만드는메소드로 Visible 프로퍼티의값을참으로만듦. Hide() 메소드 public void Show(); 컨트롤을화면에서사라지게만드는메소드로 Visible 프로퍼티의값을거짒으로만듦. public void Hide(); Invalidate() 메소드 컨트롤의영역을무효화하여, 다시화면에그려지도록만드는메소드 public void Invalidate(); Paint 이벤트를발생시켜 Paint 이벤트의처리기에서폼이나컨트롤에새로운내용을그리는작업을하도록함. [63/67]
BringToFront() 메소드해당컨트롤을맨앞으로이동시키는메소드 public void BringToFront(); SendToBack() 메소드해당컨트롤을맨뒤로이동시키는메소드 public void SendToBack(); PointToClient() 메소드젂체화면상의좌표로되어있는한점을컨트롤의 Location 프로퍼티와의상대좌표로변환하는메소드 public Point PointToClient(Point p); PointToScreen() 메소드컨트롤영역안에있는한점의좌표를젂체화면상의좌표로변환하는메소드 public Point PointToScreen(Point p); [64/67]
RectangleToClient() 메소드 젂체화면상의영역을이루는사각형의좌표를컨트롤의 Location 프로퍼티와의상대좌표로변환하는메소드 public Rectangle RectagleToClient(Rectangle r); RectangleToScreen() 메소드 클라이언트영역의상대좌표로되어있는사각형을젂체화면상의좌표로변환하는메소드 public Rectangle RectagleToScreen(Rectangle r); ResetXxx() 메소드 Xxx 와일치하는이름을가짂프로퍼티의값을초기값으로되돌리는일을하는메소드 public void ResetXxx(); Xxx 위치에올수있는프로퍼티 BackColor, Bindings, Cursor, Font, ForeColor, ImeMode, RightToLeft, Text [65/67]
주요이벤트 이벤트 설명 Click 컨트롤을마우스로클릭할때발생한다. Move 컨트롤의위치가변경되었을때발생한다. Paint 컨트롤을다시그려야할때발생한다. Resize 컨트롤의크기가변경되었을때발생한다. XxxChanged Xxx 이름을가짂프로퍼티가변경되었을때발생한다. [66/67]
Paint 이벤트컨트롤을다시그려야하는경우에발생하는이벤트 PaintEventArgs 클래스형의매개변수 ClipRectangle: 새로그려야하는영역. Graphics: 컨트롤을그리는데사용하는 Graphics 객체. Move 이벤트컨트롤의위치가변경되면발생하는이벤트 Resize 이벤트컨트롤의크기가변경이되면발생하는이벤트 XxxChanged 이벤트 Xxx 와일치하는이름을가짂프로퍼티의값이변경되면이벤트가발생 [67/67]