Study - Programming/C#2007. 11. 26. 01:10

using System;
using System.Windows.Forms;

class Program : Form
{
    public Program(string strText)
    {
        this.Text = strText;
        this.Load += new System.EventHandler(this.Form_Load);
        this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.Form_Closed);
        this.MouseClick += new System.Windows.Forms.MouseEventHandler(this.Form_Click);
        this.MouseEnter += new System.EventHandler(this.Form_MouseEnter);
        this.Show();
    }

    public static void Main(string[] args)
    {
        Application.Run(new Program("이벤트!"));
    }

    private void Form_Load(object sender, System.EventArgs e)
    {
        Console.WriteLine("윈도우가 Load됩니다.");
    }
    private void Form_Closed(object sender, System.EventArgs e)
    {
        Console.WriteLine("윈도우가 Closed됩니다.");
    }

    private void Form_Click(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        Console.WriteLine(e.Button);
    }

    private void Form_MouseEnter(object sender, System.EventArgs e)
    {
        Console.WriteLine("Mouse Entered!!");
    }

   
}

  실제 실행 결과는 여기서 이벤트가 발생하면 콘솔에 그에 대한 내용이 출력된다. 대표적으로 Load와 Closed이벤트가 있겠다. MouseEnter은 마우스가 폼에 진입했을때 발생하는 이벤트인데, 상당히 흥미로운 이벤트였다. 직접 구현했으면 복잡했을 것을 이렇게 간단히 지원해주니 좋을 따름.
 
  Click이벤트를 보면 두번째 인자가 좀 다른것을 볼 수 있다. System.Windows.Forms.MouseEventArgs인자의 Button속성은 누른 마우스 버튼이 무엇인지를 알려 준다.

  각 이벤트마다 등록해줘야 할 이벤트 등록 클래스가 각각 다르다. 그러므로 중요한것은 따로 암기해 두고, 필요할때는 MSDN 등을 통해 검색해 보고 사용해야 할 것이다. 예를 들면 Load와 FormClosed이벤트의 등록 클래스의 형태는 다르다.

  이벤트의 등록 방법은 다음과 같다.

[이벤트 이름] +- new System.EventHandler(메서드);

  이벤트의 제거는 -=를 이용해 주면 되고, 메서드는 알아서 만들어서 넣어 주면 되지만 그 형태는 다음과 같다.

private void 메서드이름(object sender,System.EventArgs e){}

물론 EventArgs는 MouseClick이벤트를 보듯이 다를 수도 있지만 대개 저런 형태이다.

sender를 다룰때는 어떤 특정한 컨트롤일 경우에는 그 컨트롤로 캐스팅을 시켜주는 경우가 많다. 예를 들어 앞 글에서 버튼을 다룰때 이런식의 코드가 있었다.

(button)sender

이렇게 object를 button으로 캐스팅을 하고 사용해 줘야 한다.

Posted by 머리