2011-08-08 5 views
1

마우스가 서식의 특정 영역 내에 연속적으로 있는지 확인할 수 있어야합니다. 타이머를 사용하지 않고도이 작업을 수행 할 수 있기를 원합니다. 이 일을 어떻게 하죠?타이머가없는 경우 계속 확인하는 방법?

저는 C# btw를 사용하고 있습니다.

+1

마우스 이벤트를 수신하고 마우스가 움직일 때마다 확인해야합니다. –

+0

타이머를 사용하지 않으려는 이유를 설명 할 수 있습니다. 나는이 상황에서 타이머가 완벽하다고 생각한다. – Bob

답변

6

MouseMove 이벤트에 처리기를 연결하고 각 운동을 확인 했습니까?

3

영역이 화면 컨트롤 인 경우 MouseEnter, MouseLeave, MouseHoverMouseMove 이벤트를 사용할 수 있습니다.

+0

그래서 "rect"라는 이름으로 마우스가 사각형 안에 있는지 확인하려고한다면 다음과 같이 사용할 것입니다 : if (rect.Contains (MouseEnter)) – Isaiah

0

해당 영역에서 이벤트를 정의해야합니다.

OnMouseEnterOnMouseLeave을 함께 사용하면 마우스가이 영역에 있는지 여부를 결정할 수 있습니다.

OnMouseEnterOnMouseLeave까지는 마우스가 아직 해당 영역에 있음을 의미합니다.

1

나는 다른 사람들이 제안한 마우스 이벤트가 가장 좋은 해결책이라고 생각하지만 타이머의 또 다른 대안으로 마우스를 점검하고 메인 윈도우 디스패처에서 "응용 프로그램 유휴 상태"로 계속 호출하는 작은 함수를 작성할 수 있습니다. 우선 순위. 이렇게하면 UI가 중단되지 않고 계속 체크가 실행됩니다. mousemove 이벤트에 연결하는 것은 여전히 ​​더 깨끗한 솔루션 인 IMO입니다.

1

MouseMove 이벤트를 후크하는 것이 너무 자주 트리거되는 경우 또는 모든 양식에서 해당 이벤트를 연결하지 않으려면 Application.Idle 이벤트를 대신 연결하는 것이 좋습니다.

이 이벤트는 응용 프로그램이 유휴 상태가 될 때마다 발생합니다. 보류중인 모든 메시지 (처리 된 내용 포함)가 처리되었으므로 수행 할 작업이 없습니다. 대부분의 WinForms 응용 프로그램에서는 초당 수 차례 발생하며 "적시에"처리하는 좋은 방법을 제공합니다.

관련 문제