2009-11-02 5 views
0

단추가 들어있는 ToolStrips로 여러 컨트롤이 있습니다. 마우스가 툴 스트립에 들어갈 때 일부 단추를 표시하거나 숨길 필요가 있습니다. 나는 미스테리 고기가 나쁘다는 것을 알고있다. 그러나 그것은 내가해야만하는 것이다.마우스가 컨트롤을 벗어날 때 어떻게 안정적으로 감지합니까?

마우스가 들어올 때 ToolStrip의 MouseEnter 이벤트가 발생하지만 마우스를 놓을 때 MouseLeave 이벤트가 항상 실행되는 것은 아닙니다. 마우스가 자식 내에서 컨트롤 밖에서 컨트롤 자체를 거치지 않고 사라 졌기 때문에 이것이 가능하다고 생각합니다.

마우스가 컨트롤을 벗어날 때 어떻게 안정적으로 감지합니까?

+0

이 동작을 재현 할 수 없습니다. 패널 내 툴팁 내에 버튼을 만들었습니다. (또한 패널없이 시도했습니다.) 저는 폼이 포커스를 가지지 않고 마우스가 버튼에서 데스크탑으로 직접 점프하더라도 마우스가 버튼과 툴 스트립을 각각 벗어날 때 버튼과 툴 스트립 모두에 대해 MouseLeave 이벤트를받습니다. Visual C# 2008 Express with .NET 3.5 SP1을 사용하고 있습니다. – BlueMonkMN

답변

0

MouseLeave는 컨트롤이 마우스 캡처를 소유 한 경우에만 발생합니다.

http://www.codeproject.com/KB/cs/globalhook.aspx 그래서 당신이 자신에게 올바른 결과를 관리 할 수 ​​있습니다 : 글로벌 후크를 사용하는 방법에 대한 어떤

0

전 세계적인 갈고리에서 벗어날 것입니다.

견적에서 : MSDN

주 당신은 디버깅 목적으로 만 글로벌 후크를 사용해야합니다; 그렇지 않으면 피해야합니다. 글로벌 후크로 인해 시스템 성능이 저하되고 전역 후크 유형을 구현하는 다른 응용 프로그램과 충돌이 발생합니다.

응용 프로그램이 포커스를 잃어 버리면 처리하기가 더 어려워집니다. 비즈니스 규칙을 재평가하십시오.

아마도 포커스를 잃을 때 응용 프로그램을 사용하지 않도록 설정하면됩니다. 이렇게하면 도구 막대를 사용하기 전에 사용자가 응용 프로그램을 클릭하거나 탭으로 이동하게됩니다. 이 시점에서 Control.GotFocus 이벤트를 캡처하고 원하는 모든 논리를 수행 할 수 있습니다.

관련 문제