2009-11-29 3 views
4

저는 응용 프로그램이 특정 키를 테스트하고 공간, 오른쪽, 왼쪽 및 기타 몇 가지 특수 처리를 제공하기 위해 기본 폼 창에서 ProcessCmdKey를 사용하고 있습니다. 기본 폼의 ProcessCmdKey는 사용자가 중첩 된 사용자 컨트롤 집합 안에 TextBox를 입력하는 경우에도 호출됩니다. TextBox 컨트롤에 포커스가있을 때 스페이스 키를 처리하고 싶지 않습니다. 스페이스 키를 입력 할 수 없기 때문입니다. 어떻게 응용 프로그램을 광범위하게 현재 집중 윈도우의 유형에 대한 테스트 할 수 있습니까?WinForms C#에서 포커스를 얻는 가장 빠른 방법은 무엇입니까?

+0

도 참조를 http://stackoverflow.com/questions/435433/what-is-the-preferred-way-to-find-focused-control-in -winforms-app – RenniePet

답변

6

이 함께 창 핸들을 얻을 수 있습니다 (있는 경우)

[DllImport("user32.dll")] 
    private static extern IntPtr GetFocus(); 

이 그럼 당신은 Control.FromHandle와 그 핸들과 관련된 .NET 컨트롤을 얻을 수 있습니다.

0
작업 표시

찾을 뭔가 :

[DllImport("user32.dll")] 
static extern IntPtr GetFocus(); 

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    IntPtr wndHandle = GetFocus(); 
    Control focusedControl = FromChildHandle(wndHandle); 
    if(focusedControl is DevExpress.XtraEditors.TextBoxMaskBox) 
    { 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
    ... 
} 
관련 문제