본문 바로가기

   
Programming/Winform

콘솔 윈폼 설정, Form

반응형
csc.exe /?

csc.exe/t:winexe Hello.cs

패스가 안잡혔을때 cmd창을 비쥬얼 스튜디오 용으로 하면 자동 패스된 상태

 


도스에서 윈폼만 뜨도록 할때 설정

 

using System;

using System.Windows.Forms;//윈폼 관련 클래스

 

namespace Csharp

{

       //Hello.cs

       class Hello : Form//창을 생성하려면 반드시 Form으로부터 파생

       {

             public static void Main(string[] args)

             {

                    //csc.exe /t:exe Hello.cs   - 콘솔 컴파일

                    //csc.exe /t:winexe Hello.cs    - 윈폼 컴파일

                    //csc.exe /t:library TestDll.cs   - DLL 컴파일

 

                    Hello h = new Hello();

                    Application.Run(h);

             }

       }



모든 행동을 이벤트를 OS가 관리한다. 무한루프를 가지고 있는 상태에서 윈도우가 쏴주는 메세지를 읽으려고 기다리고 있다. 이러한 행동을 WIN32에서 메시지 루프라고 한다.

 

//무한루프 메시지 루프를 돌며 os가 이벤트 받는것을 기다린다.

//시작폼, 메인폼 나머지는 모두 자식창 Run이 시작점

// - 메인폼이 닫히면 나머지 폼도 닫힌다.

// 프로젝트 제외의 차이 = 실제 코드에 추가가 되서 파일의 크기가 커진다.

Application.Run(new Form1());

 

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 WindowsForms01

{

       public partial class Event02 : Form

       {

             public Event02()

             {

                    InitializeComponent();

             }

 

             private void Test(object sender, EventArgs e)

             {

                    //정적 이벤트 관리(추가, 수정, 삭제)

                    // - 컴파일 이전에 완료(완성)

 

                    //동적 이벤트 관리

                    // - 2번쨰 버튼 -> 클릭 이벤트X -> 동적 생성

                    this.button2.Click += new EventHandler(Test2);

 

                    // - 3번째 버튼 이벤트 추가

                    this.button3.Click += new EventHandler(Test3);

 

                    //4번째 이벤트 추가

                    if (DateTime.Now.Hour < 12)

                           this.button4.Click += new EventHandler(M1);

                    else

                           this.button4.Click +=new EventHandler(M2);

             }

 

             void button4_Click(object sender, EventArgs e)

             {

                    throw new NotImplementedException();

             }

 

             //4번째 버튼 클릭 이벤트 핸들러(메서드)

             private void M1(object sender, EventArgs args)

             {

                    //C#에서 쓰는 모든 델리게이트는 object sender, EventArgs args(모든게 상속받는다 인자값을 갖는다)

                    MessageBox.Show("안녕하세요~");

             }

 

             private void M2(object sender, EventArgs args)

             {

                    //C#에서 쓰는 모든 델리게이트는 object sender, EventArgs args(모든게 상속받는다 인자값을 갖는다)

                    MessageBox.Show("안녕히 가세요~");

             }

 

             private void Test2(object sender, EventArgs e)

             {

                    MessageBox.Show("안녕");

             }

 

             private void Test3(object sender, EventArgs e)

             {

                    //접근지정자 생략시 자동으로 private(캡슐화 때문에)

                    //동적 이벤트 관리를 사용하는 이유?

             }

 

       }

}

 

Control 클래스

 - , 컨트롤의 부모 클래스

 

 

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 WindowsForms01

{

       public partial class Form03 : Form

       {

             public Form03()

             {

                    InitializeComponent();

             }

 

             private void Form03_Load(object sender, EventArgs e)

             {

                    //폼로드

                    // - 폼 인스턴스가 생성되고 난 직후에

                    // - 초기화 작업(컨트롤) = 생성자 초기화와 차이가 거의 없다.

                    // - 폼로드 <> 폼이 화면에 보임

                    // - 폼로드 == 폼이 메모리상에 생성

                    // - 폼객체가 생성되고 난 직후 or 폼객체가 화면에 보이기 직전

                    MessageBox.Show("생성자 변수 초기화 등");

 

             }

 

             private void Form03_FormClosed(object sender, FormClosedEventArgs e)

             {

                    //폼이 닫힌 후 발생

                    // - 마무리 작업

                    MessageBox.Show("클린, 클로스, 파일 클로스등");

             }

 

             private void Form03_Shown(object sender, EventArgs e)

             {

                    //Load와 유사

                    // - 처음 실행할때 발생

       // - 1. 폼객체가 메모리에 생성 -> 2. Load이벤트 발생 -> 3. 폼객체가 화면에 표시 -> 4. Shown이벤트 발생

                    //탄생이유? 화면적인 필요성에 의해 만들어짐 팝업용도로도 사용가능

                    MessageBox.Show("Shown");

             }

 

             private void Form03_FormClosing(object sender, FormClosingEventArgs e)

             {

                    //Closed : 폼이 완전히 닫혔을때

                    //Closing : 폼이 닫히기 바로 직전

                    //e.Cancel 이것 때문에 클로징을 쓴다.

 

                    if (MessageBox.Show

                           ("정말 종료 하시겠습니까", "종료",

                           MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.Cancel)

                    {

                           e.Cancel = true;//폼이 닫히는 진행을 취소

                    }

                    //MessageBox.Show("Closing");

                   

             }

       }

}

 

 

 

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 WindowsForms01

{

       public partial class Form04 : Form

       {

             //살려두기위해서..(모든메서드에서 접근 가능하게 하기 위해서)

             private Form04Child child;

            

             public Form04()

             {

                    InitializeComponent();

                   

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    //자식창(Form) 생성 -> 열기

                    // - Form클래스의 객체 == (윈도우, )

                    //폼은 실제 보이지 않지만 메모리에 올려져 있다.

                    Form f = new Form();

 

                    //자식창 꾸미기

                    //this == Form04(Form)

                    //form == form

                    f.Text = "자식창";

                    f.Size = new System.Drawing.Size(100, 100);

                    f.FormBorderStyle = FormBorderStyle.FixedToolWindow;

                    f.BackColor = Color.Yellow;

 

                    f.Show();

             }

 

             private void button2_Click(object sender, EventArgs e)

             {

                    child = new Form04Child();

                    this.child.Show();

             }

 

             private void button3_Click(object sender, EventArgs e)

             {

                    //자식창 닫기 -> 폼객체.Close();

                    this.child.Close();

             }

       }

}

 

 

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 WindowsForms01

{

       public partial class Form04Child : Form

       {

             public Form04Child()

             {

                    InitializeComponent();

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    this.Close();//창닫기

             }

       }

}

 

 

 


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 WindowsForms01

{

       public partial class Form04 : Form

       {

             //살려두기위해서..(모든메서드에서 접근 가능하게 하기 위해서)

             private Form04Child child;

            

             public Form04()

             {

                    InitializeComponent();

                   

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    //자식창(Form) 생성 -> 열기

                    // - Form클래스의 객체 == (윈도우, )

                    //폼은 실제 보이지 않지만 메모리에 올려져 있다.

                    Form f = new Form();

 

                    //자식창 꾸미기

                    //this == Form04(Form)

                    //form == form

                    f.Text = "자식창";

                    f.Size = new System.Drawing.Size(100, 100);

                    f.FormBorderStyle = FormBorderStyle.FixedToolWindow;

                    f.BackColor = Color.Yellow;

 

                    f.Show();

             }

 

             private void button2_Click(object sender, EventArgs e)

             {

                    //방법1. 생성자를 통해서 부모 폼을 넘겨준다.

                    //child = new Form04Child(this);

 

                    //방법2. 프로퍼티를 통해서 부모폼을 넘겨준다.

                    //child = new Form04Child();

                    //child.Parent1 = this;

 

                    //방법3 프로퍼티를 통해서 부모폼을 넘겨준다. Owner 와 방법 2는 같은 로직이다.

                    child = new Form04Child();

                    child.Owner = this;

                    this.child.Show();

             }

 

             private void button3_Click(object sender, EventArgs e)

             {

                    //자식창 닫기 -> 폼객체.Close();

                    this.child.Close();

             }

 

             private void button4_Click(object sender, EventArgs e)

             {

                    //부모 -> 자식(텍스트박스)

                    child.textBox1.Text = "부모로부터 접근했습니다.";

             }

       }

}

 

 



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 WindowsForms01

{

       public partial class Form04Child : Form

       {

 

             private Form04 parent;

 

             public Form04 Parent1

             {

                    get { return parent; }

                    set { parent = value; }

             }

 

             public Form04Child()

             {

                    InitializeComponent();

                   

             }

 

             public Form04Child(Form04 parent)

             {

                    InitializeComponent();

                    this.parent = parent;

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    this.Close();//창닫기

             }

 

             private void button2_Click(object sender, EventArgs e)

             {

                    //부모폼객체.textBox1

                    //this.parent.textBox1.Text

                    //부모폼객체(this)

                    //소유하고 있는 주체를 파악하도록 한다.

                    //((Form04)this.Owner).textBox1.Text = "자식~";

                    ((Form04)this.Owner).textBox1.Text = this.textBox1.Text;

             }

 

             private void textBox1_KeyDown(object sender, KeyEventArgs e)

             {

                    //엔터키를 눌렀을때..반응

                    if (e.KeyCode == Keys.Enter)

                    {

                           //복사

                           ((Form04)this.Owner).textBox1.Text = this.textBox1.Text;

                           this.Close();

                    }

             }

       }

}

 

 



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 WindowsForms01

{

       public partial class Form05 : Form

       {

             private Form05Child child;

 

             public Form05()

             {

                    InitializeComponent();

                   

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    child = new Form05Child();

                    child.Show();

             }

 

             private void button2_Click(object sender, EventArgs e)

             {

                    child.Close();

             }

 

 

             private void button3_Click(object sender, EventArgs e)

             {

                    //닫기 : 창객체를 메모리에서 제거

                    //감추기 : 화면에서만 보이지 않게(메모리 살아있음)

 

                    //토글 버튼

                    if (button3.Text == "자식창 감추기")

                    {

                           child.Hide();

                           button3.Text = "자식창 보이기";

                    }

                    else

                    {

                           child.Show();

                           button3.Text = "자식창 감추기";

                    }

 

 

             }

 

             private void button4_Click(object sender, EventArgs e)

             {

                    this.Hide();

             }

 

            

       }

}

 

 



 

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 WindowsForms01

{

       public partial class Form05Child : Form

       {

             public Form05Child()

             {

                    InitializeComponent();

             }

 

             private void button1_Click(object sender, EventArgs e)

             {

                    //열기

             }

       }

}


반응형