일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Google Spreadsheet
- hive
- Kotlin
- Python
- Github
- math
- Redshift
- SQL
- django
- c#
- array
- Apache
- Java
- matplotlib
- Mac
- PANDAS
- Excel
- google apps script
- GIT
- dataframe
- PostgreSQL
- Google Excel
- PySpark
- numpy
- Tkinter
- gas
- 파이썬
- string
- list
- Today
- Total
달나라 노트
C# : MouseMove (Mouse Event) 본문
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 값이 현재 마우스 포인터의 위치로 업데이트되었으므로 그려지는 원 또한 마우스 포인터의 위치에 그려질 것입니다.
'C# > C#' 카테고리의 다른 글
C# : Lambda (Event Handler에 Lambda 식 적용) (0) | 2022.05.30 |
---|---|
C# : DrawImage (이미지 표시하기) (0) | 2022.05.30 |
C# : DrawRectangle, Pen (비어있는 사각형) (0) | 2022.05.30 |
C# : FillRectangle (채워진 사각형) (0) | 2022.05.30 |
C# : MaximumSize, MinimumSize (Window의 최대 크기 설정, Window의 최소 크기 설정, Window 크기 고정, Form 최대 크기, Form 최소 크기, Form 크기 고정) (0) | 2022.05.24 |