달나라 노트

C# : MouseMove (Mouse Event) 본문

C#/C#

C# : MouseMove (Mouse Event)

CosmosProject 2022. 5. 30. 19:15
728x90
반응형

 

 

 

MouseMove Event는 마우스가 움직일 때 발생하는 Event입니다.

 

보통 이런 Event는 실시간으로 마우스의 위치를 파악해야할 때 유용합니다.

 

아래 코드를 봅시다.

 

using System;
using System.Windows.Forms;
using System.Drawing;

class Sample2
{
    public static void Main()
    {
        Form fm = new Form();
        fm.ClientSize = new Size(300, 250);

        Label lbl = new Label();
        lbl.Parent = fm;
        lbl.Width = 200;
        lbl.Height = 30;

        void mouse_realtime_location(object sender, MouseEventArgs e)
        {
            string x = e.X.ToString();
            string y = e.Y.ToString();

            lbl.Text = "X = "+ x + ", Y = " + y;
        }
        fm.MouseMove += new MouseEventHandler(mouse_realtime_location);



        Application.Run(fm);
    }
}

 

위 코드는 Form의 어느 위치에 마우스를 가져다두면 이벤트가 발생하여 마우스의 현재 위치 좌표를 Label에 표시해주도록 한 예시입니다.

 

 

위 코드를 실행하면 일단 비어있는 Form이 발생합니다.

 

 

 

그리고 마우스를 Form 내부에 가져가면 위처럼 마우스의 X, Y 좌표가 표시됩니다.

이 이벤트는 마우스가 움직일 때 발생하므로 별도의 클릭이나 동장 없이 마우스가 움직일 때 마다 실시간으로 마우스의 위치 좌표가 업데이트되어 표시됩니다.

 

 

 

 

        void mouse_realtime_location(object sender, MouseEventArgs e)
        {
            string x = e.X.ToString();
            string y = e.Y.ToString();

            lbl.Text = "X = "+ x + ", Y = " + y;
        }
        fm.MouseMove += new MouseEventHandler(mouse_realtime_location);

 

Mouse Event method 부분입니다.

 

보통 Mouse Event에서 마우스의 위치 등 마우스 관련 정보는 MouseEventArgs에 존재합니다.

 

따라서 위 코드에서도 string x, string y에 마우스의 현재 위치 좌표 정보를 할당할 때 parameter인 e로부터 X, Y좌표를 추출하였습니다.

 

 

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;
using System.Drawing;

class Sample2
{
    public static void Main()
    {
        Form fm = new Form();
        fm.ClientSize = new Size(300, 250);

        Label lbl = new Label();
        lbl.Parent = fm;
        lbl.Width = 200;
        lbl.Height = 30;

        int mouse_x = 0;
        int mouse_y = 0;

        void mouse_realtime_location(object sender, MouseEventArgs e)
        {
            string x = e.X.ToString();
            string y = e.Y.ToString();
            mouse_x = (int)e.X;
            mouse_y = (int)e.Y;

            lbl.Text = "X = "+ x + ", Y = " + y;
            fm.Invalidate();
        }
        fm.MouseMove += new MouseEventHandler(mouse_realtime_location);


        void draw_circle(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillEllipse(new SolidBrush(Color.Gray), mouse_x, mouse_y, 20, 20);
        }
        fm.Paint += new PaintEventHandler(draw_circle);



        Application.Run(fm);
    }
}

 

MouseMove Event를 응용해서 위같은 코드를 작성해보았습니다.

위 코드는 Form을 띄우고 현재 마우스 위치에 원을 그리는 코드입니다.

 

 

코드를 실행하면 위처럼 비어있는 Window가 보입니다.

 

 

그리고 Window에 마우스를 올려서 마우스를 움직여보면, 마우스 포인터에 원이 따라오는것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

        void mouse_realtime_location(object sender, MouseEventArgs e)
        {
            string x = e.X.ToString();
            string y = e.Y.ToString();
            mouse_x = (int)e.X;
            mouse_y = (int)e.Y;

            lbl.Text = "X = "+ x + ", Y = " + y;
            fm.Invalidate();
        }
        fm.MouseMove += new MouseEventHandler(mouse_realtime_location);

 

일단 Mouse가 Window에서 움직이면 MouseMove Event가 발생하여 mouse_x, mouse_y 변수의 값을 현재 마우스의 위치로 업데이트합니다.

 

그리고 fm.Invalidate()를 통해 Form에 속한 Paint들을 다시 그립니다.

 

 

 

 

 

        void draw_circle(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillEllipse(new SolidBrush(Color.Gray), mouse_x, mouse_y, 20, 20);
        }
        fm.Paint += new PaintEventHandler(draw_circle);

 

Paint Event를 보면 위처럼 mouse_x, mouse_y 좌표에 원을 그리는 내용을 담고 있습니다.

MouseMove Event에 의해 mouse_x, mouse_y 값이 현재 마우스 포인터의 위치로 업데이트되었으므로 그려지는 원 또한 마우스 포인터의 위치에 그려질 것입니다.

 

 

 

 

 

 

728x90
반응형
Comments