m.cafe.daum.net/smbitpro/R7EG/9
Form 이벤트
이번에는 Form의 이벤트중에서 마우스와 작업에 관련된 이벤트들에 대해 살펴보기로 하자.
(참고로 마우스 클릭과 같은 이벤트는 작업 관련 이벤트로 분류를 하였다.)
마우스 이벤트
이벤트명 |
이벤트 파라미터 |
설명 |
MouseDown |
MouseEventArgs |
마우스를 누르면 발생 |
MouseEnter |
EventArgs |
마우스가 컨트롤의 보이는 부분으로 들어오면 발생 |
MouseHover |
EventArgs |
마우스가 일정 시간 동안 컨트롤의 내부에 고정되어 있을 때 발생 |
MouseLeave |
EventArgs |
마우스가 컨트롤의 보이는 부분에서 벗어나면 발생 |
MouseMove |
MouseEventArgs |
마우스가 컨트롤 위에서 이동할 때 발생 |
MouseUp |
MouseEventArgs |
마우스를 떼면 발생 |
1. MouseEventArgs의 public 속성
MouseEventArgs는 MouseDown, MouseMove, MouseUp 이벤트 핸들러에 넘어오는 인자이다.
다음은 MouseEventArgs의 public 멤버 속성들이다.
속성 명 |
형식 |
설명 |
Button |
MouseButtons |
누른 마우스 버튼 |
Clicks |
int |
마우스 클릭 횟수 |
Delta |
int |
마우스 휠 회전 수 |
Location |
Point |
마우스 위치 |
X |
int |
마우스의 X좌표 |
Y |
int |
마우스의 Y좌표 |
MouseEventArgs의 public 멤버 속성들의 의미는 직관적으로 이해할 수 있을 것이다. 참고로, EventArgs에는 public 멤버 속성이 없다.
마우스 이벤트에 프로그램을 통해 살펴보기로 하자.
먼저, Windows Forms 응용 프로그램 프로젝트를 생성하여 발생한 이벤트와 각 속성들을 표시할 Label 컨트롤을 추가하자. X, Y 속성은 Location에 있는 속성이므로 별도로 표시할 필요는 없을 것이다.
그리고, MouseDown, MouseEnter, MouseLeave, MouseUp 이벤트 핸들러를 추가하자.
MouseMove 이벤트 핸들러나 MouseHover 이벤트를 추가하면 우리의 눈이 화면 변화를 감지하기 힘들기 때문에 먼저 이들을 제외한 이벤트 핸들러만 추가하자.
그리고, 각 이벤트 핸들러에 발생한 이벤트와 속성들을 각각의 Label컨트롤의 Text 속성에 대입하면 이들에 대해 관찰할 수가 있을 것이다.
private void Form1_MouseDown(object sender, MouseEventArgs e) { label1.Text = "MouseDown 이벤트 발생"; SetLabelsByMouseEventArgs(e); }
private void Form1_MouseEnter(object sender, EventArgs e) { label1.Text = "MouseEnter 이벤트 발생"; SetLabelsEmpty(); }
private void Form1_MouseLeave(object sender, EventArgs e) { label1.Text = "MouseLeave 이벤트 발생"; SetLabelsEmpty(); }
private void Form1_MouseUp(object sender, MouseEventArgs e) { label1.Text = "MouseUp 이벤트 발생"; SetLabelsByMouseEventArgs(e); }
private void SetLabelsByMouseEventArgs(MouseEventArgs e) { label2.Text = "위치:" + e.Location.ToString(); label3.Text = "누른 버튼:" + e.Button.ToString(); label4.Text = "클릭 수:" + e.Clicks.ToString(); label5.Text = "휠 회전 수:" + e.Delta.ToString(); }
private void SetLabelsEmpty () { label2.Text = string.Empty; label3.Text = string.Empty; label4.Text = string.Empty; label5.Text = string.Empty; } |
실행한 후에 마우스를 가지고 여러 액션을 취하면 충분히 이해할 것이다.
그리고, 이번에는 MouseMove와 MoveHover에 관한 이벤트 핸들러도 추가하여 작성해 보자.
private void Form1_MouseHover(object sender, EventArgs e) { label1.Text = "MouseHover 이벤트 발생"; SetLabelsByEventArgs(e); }
private void Form1_MouseMove(object sender, MouseEventArgs e) { label1.Text = "MouseMove 이벤트 발생"; SetLabelsByMouseEventArgs(e); } |
실행한 후에 마우스를 가지고 여러 액션을 취하면 충분히 이해할 것이다.
작업 이벤트
이벤트명 |
이벤트 파라미터 |
설명 |
Click |
EventArgs |
클릭하면 발생 |
DoubleClick |
EventArgs |
더블 클릭하면 발생 |
MouseCaptureChanged |
EventArgs |
컨트롤이 마우스 캡쳐를 얻었거나 잃었을 때 발생 |
MouseClick |
MouseEventArgs |
마우스 클릭하면 발생 |
MouseDoubleClick |
MouseEventArgs |
마우스 더블 클릭하면 발생 |
ResizeBegin |
EventArgs |
사이즈 변경이 시작하면 발생 |
ResizeEnd |
EventArgs |
사이즈 변경이 끝나면 발생 |
Scroll |
ScrollEventArgs |
스크롤 되면 발생 |
위의 이벤트들을 보면 Click이벤트와 MouseClick, DoubleClick과 MouseDoubleClick이벤트의 차이가 무엇인지 이해가 안 될 수도 있을 것이다.
만약, 버튼이 포커스를 갖을 때 엔터를 치면 Click이벤트는 발생하지만 MouseClick이벤트는 발생하지 않는다. 물론, 마우스를 클릭하면 Click이벤트와 MouseClick이벤트가 순차적으로 발생한다. 마우스를 클릭한 경우에 마우스의 위치 등의 정보가 필요하다면 MouseClick이벤트 핸들러에서 처리하면 될 것이고 이러한 정보가 필요없다면 Click이벤트에서 처리를 하면 될 것이다.
DoubleClick과 MouseDoubleClick은 마우스를 더블 클릭했을 때 순차적으로 발생하며 이벤트 파라미터가 다른 것외에는 아무런 차이도 없다.
EventArgs의 public 속성은 없고 MouseEventArgs에 대해서는 위에서 언급하였다.
1. ScrollEventArgs의 public 속성
ScrollEventArgs는 Scroll 이벤트 핸들러에 넘어오는 인자이다.
다음은 ScrollEventArgs의 public 멤버 속성들이다.
속성 명 |
형식 |
설명 |
NewValue |
int |
바의 새 값 |
OldValue |
int |
바의 기존 값 |
ScrollOrientation |
ScrollOrientation |
바의 방향(수평 혹은 수직) |
Type |
ScrollEventType |
스크롤 이벤트 타입 |
ScrollEventType의 열거형 멤버 목록은 다음과 같다.
목록 명 |
설명 |
SmallDecrement |
바의 왼쪽 혹은 위쪽 스크롤 화살표 클릭 |
SmallIncrement |
바의 오른쪽 혹은 아래쪽 스크롤 화살표 클릭 |
LargeDecrement |
스크롤 상자 왼쪽 혹은 위쪽 클릭 |
LargeIncrement |
스크롤 상자 오른쪽 혹은 아래쪽 클릭 |
ThumbPosition |
스크롤 상자를 이동 |
ThumbTrack |
현재 스크롤 상자 이동 중 |
First |
Minimum 위치로 이동 |
Last |
Maximum 위치로 이동 |
EndScroll |
스크롤 상자 이동 중지 |
'개발언어 > C#' 카테고리의 다른 글
[C#] (강의) 4. 컨트롤 개요 (2. 이벤트 처리 ) (0) | 2021.04.12 |
---|---|
[C#] (강의) 4. 컨트롤 개요 (폼 배치) (0) | 2021.04.12 |
[C#] (강의) 3. Form 이벤트 (키) (0) | 2021.04.12 |
[C#] (강의) 2. Form 속성(모양/포커스/액세스 가능성) (0) | 2021.04.12 |
[C#] (강의) 2. Form 속성(레이아웃) (0) | 2021.04.12 |