2009-03-27 4 views

답변

5

Control.MousePosition 및 Control.MouseButtons는 사용자가 찾고있는 것입니다. Control.PointToClient() 및 Control.PointToScreen()을 사용하여 화면과 제어 상대 좌표간에 변환합니다.

자세한 내용은 MSDN Control.MouseButtons Property, Control.MousePosition Property, Control.PointToClient MethodControl.PointToScreen Method을 참조하십시오. D Moose's 답변을 참조하고 이벤트 인수를 보라 :


UPDATE는 ... 나무의 나무를 볼 수 없습니다.

MSDN article은 어떤 마우스 동작이 컨트롤에 따라 어떤 이벤트를 트리거하는지 나열합니다. 이 작동하지 않도록

UPDATE 나는 무스의 캐스트를 놓쳤다. Control.DoubleClick() 내부에서 정적 컨트롤 속성을 사용해야합니다. 버튼 정보가 비트 필드로 인코딩되었으므로 원하는 버튼을 사용하여 다음과 같이 테스트해야합니다.

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left 
+0

Control.MouseButtons를 사용하여 어떤 버튼을 눌렀는지 어떻게 알 수 있습니까? 그것은 비교할 상수를 포함하고 있지만 그것을 사용하는 방법을 알지 못합니다. doubleclick eventargs에는이 변수와 비교할 변수가 없습니다. – user79755

+0

danbruc, 머리 감사합니다! 귀하의 정보를 반영하도록 내 게시물을 수정했습니다. – Moose

+0

귀하의 대답은 더 좋습니다 : Compact Framework에는 MouseDoubleClick 이벤트가 없지만 방법은 문제가 없습니다. – Soonts

9

참고 : danbruc가 지적한 바와 같이 전자는 MouseEventArgs 형식이 아니기 때문에,이, UserControl이 작동하지 않습니다. 또한 모든 컨트롤이 DoubleClick 이벤트를 제공하지는 않습니다. 예를 들어 Button에서 두 번의 Click 이벤트 만 보낼 수 있습니다.

private void Form1_DoubleClick(object sender, EventArgs e) 
    { 
     MouseEventArgs me = e as MouseEventArgs; 

     MouseButtons buttonPushed = me.Button; 
     int xPos = me.X; 
     int yPos = me.Y; 
    } 

는 또한 MouseEventArgs 형식의 좌우 버튼을 갖는다 .. X, Y 형태에 대하여 취득.

+0

Ohhhh yes ... 그냥 간단한 것을 잊어 버렸습니다. : D –

+0

Ohhhh no ... 이벤트 인수가 MouseEventArgs가 아니므로 null이됩니다. 작동하지 않습니다. –

+0

@danbruc - 음, 방금 시도했는데 ... 나에게 효과가 있니? 어쩌면 나는 단지 내 혀를 들고있어! – Moose

13

사용 MouseDoubleClick 이벤트가 아닌 DoubleClick 이벤트. MouseDoubleClick은 일반 EventArgs가 아닌 MouseEventArgs를 제공합니다. 이것은 "Click"뿐만 아니라 "MouseClick"과 마우스를 다루는 다른 모든 이벤트에 사용됩니다.

MouseDoubleClick은 마우스가 실제로 있는지 확인합니다. DoubleClick이 뭔가 다른 원인이 될 수 있으며 마우스 좌표가 유용하지 않을 수 있습니다. - MSDN : "DoubleClick 이벤트는 논리적으로 컨트롤의 더 높은 수준의 이벤트이며 바로 가기 키 조합과 같은 다른 사용자 작업에 의해 발생할 수 있습니다."