2010-12-08 3 views
2

내 컨트롤 (DragEnter와 DragLeave 사이)에서 드래그 앤 드롭 작업이 진행되는 동안 keydown 이벤트 (O, C, G 키 등)에 응답해야합니다. 그러나이 단계에서는 KeyDown 이벤트가 호출되지 않습니다.드래그 드롭 중에 핸들 KeyDown

내 컨트롤을 선택하고 특히 DragEnter에 포커스를 설정하려고했지만 작동하지 않습니다.

편집 : 나는 내가 원하는 동작을 취득 GetAsynchKeyState를 사용했다를 제외하고

한스 '대답은, 기본적으로 올바른 것입니다.

답변

3

012ControllerDrag 이벤트는 소스에서 발생합니다. 관심있는 키의 상태를 확인하는 것이 pinvoke를 요구할 것이므로 이벤트는 Esc 키와 수정 자 키 상태 변경을 인식하는 데 도움이되도록 설계되었습니다. 어떤 열쇠가 염두에 두어야 할 것입니다,이 열쇠는 특별한 행동이 있습니다 매우 undispverable입니다.

[DllImport("user32.dll")] 
    private static extern short GetKeyState(Keys key); 

키가 눌러져있을 때 값은 <입니다. 나는 그것이 올바르게 작동한다고 보장 할 수는 없지만 시도했을 때 좋았습니다.

+1

감사 한스, 그것은 할 것입니다 : 예는 고도 (왼쪽 Alt)와 Ctrl 키 키를 모두 누를 경우 확인하는 방법을 보여줍니다. 검색 가능성에 대해 걱정할 필요없이 드래그 작업 중 주요 바로 가기에 대한 추가 정보가 컨트롤로 들어갑니다. –

2

또한 시도 할 수 있습니다 : 특정 키를 누를 경우 Keyboard.IsKeyDown(); 방법을 확인하기 위해 예 :

bool isKeyPressed = Keyboard.IsKeyDown(Key.LeftAlt); 

그것은 이전의 대답과 비슷하지만 네이티브 .NET 방법, 그래서 그렇지 모든 기능을 가져와야합니다.

비슷한 질문이 여기에 있습니다 : Handle KeyDown during a drag drop. Or keydown event not workign,하지만 이벤트와 같이 작동하도록 제안했습니다.

UPDATE는

첫 번째 솔루션은 WPF에서만 작동하는 것 같다. 수정 자 키의 상태를 확인하려는 경우, WinForms에서 올바르게 작동해야하는 Form.ModifierKeys 속성을 이용하는 방법이 있습니다.

if (Form.ModifierKeys == (Keys.Alt | Keys.Control)) 
{ 
    //TODO: insert your code here 
} 
+0

좋은 조언이 있지만 이제는 WPF가 허용됩니다. 나는 winforms에만 붙어 있어야합니다. –

+0

아, 죄송합니다. 나는 눈치 채지 못했습니다. 그러나, 나는 WinForms를 사용할 때 correcty를 사용해야하는 수정 자 키를 위해 다른 방법을 발견했습니다. –