2016-12-08 6 views
0

저는 Visual C#을 처음 접했지만 오랫동안 델파이로 코딩했습니다. 키보드의 특정 키를 입력하지 않으면 숨겨진 간단한 패널이있는 양식을 만들었습니다 ("KeyPreview"가 양식에 대해 true로 설정되어 있고 KeyDown 이벤트를 사용하여 정확한 키 패널을 보이게하거나 보이지 않게하기 위해). 패널 바로 아래에는 webBrowser 구성 요소가 있습니다. 다음과 같이 어떤 일이 일어나고언제 C# 폼에 포커스가 있는지 확인하십시오.

은 다음과 같습니다

내 양식이 처음 시작할 때, 나는 양식을 처음에 포커스가 확실하게 "가 표시"이벤트에 대한 코드가 있습니다

private void Form1_Shown(object sender, EventArgs e) 
{ 
    if (!Focused) 
    { 
     Focus(); 
    } 
} 

양식 인 경우를 이 시점에 초점을 맞추면 올바른 키 입력을 감지하여 패널을 표시하거나 사라지게하는 코드가 올바르게 작동합니다.

여기에 이상하게 보이고 무엇을해야할지 모르겠습니다.

  1. 내가 키 스트로크 (keystroke)를 내 양식에 포커스를 취득하고 시도하는 또 다른 형태에 다음 내 양식의 캡션 표시 줄을 클릭하면, 키 입력 감지 : 내가 잘못이 무엇인지에 대한 처리하고 두 부분이 있습니다 작동하지 않습니다. 그러나 다른 양식을 클릭 한 다음 한 번 더 양식을 다시 누르면 양식에 대한 키 입력 감지가 작동합니다. 나는 from이 다시 집중할 때마다 이것이 제대로 작동하도록하기 위해 무엇을 할 수 있습니까?

  2. 내 양식에서 웹 브라우저 구성 요소를 클릭하면 해당 양식의 KeyDown 코드가 더 이상 제정되지 않습니다. 양식의 캡션 표시 줄을 클릭해도 KeyDown 이벤트가 작동하지 않습니다. 내 양식 내의 구성 요소를 클릭하면 내 양식이 KeyDown 이벤트에 대해 계속 응답 할 것임을 보장하기 위해해야 ​​할 일은 무엇입니까?

미리 조언 해 주셔서 감사합니다.

+0

캡션 표시 줄의 코드를 표시 할 수 있습니까? –

+0

그게 전부입니다. 캡션 표시 줄에 대한 코드가 없습니다. 폼 자체에 대한 KeyDown 이벤트에 대한 코드가 있습니다. – Andre72127

답변

0

캡션 표시 줄이 주요 이벤트를 가로 채고있는 것처럼 보이는 이유를 말할 수 없습니다. 폼의 다양한 구성 요소가 포커스를 가질 수 있으므로 키보드 이벤트를 캡처 할 수 있습니다. 나는 웹 브라우저 컨트롤이 이런 방식으로 작동한다는 것을 알고있다. 전 세계적으로 키보드 이벤트를 캡처하는 것을 고려할 수 있습니다.

Codeproject에서이를 수행하는 방법을 보았습니다. 이게 도움이 되길 바란다.

그들은 UserActivityHooks를 사용합니다.

UserActivityHook actHook; 
void MainFormLoad(object sender, System.EventArgs e) 
{ 
    actHook= new UserActivityHook(); // crate an instance 

// hang on events 

    actHook.OnMouseActivity+=new MouseEventHandler(MouseMoved); 
    actHook.KeyDown+=new KeyEventHandler(MyKeyDown); 
    actHook.KeyPress+=new KeyPressEventHandler(MyKeyPress); 
    actHook.KeyUp+=new KeyEventHandler(MyKeyUp); 
} 

웹 브라우저 컨트롤은 물론 키보드 이벤트를 인터셉트합니다. 사용자는 종종 양식에 텍스트를 입력해야하며 키보드 이벤트를 구체적으로 처리하기 위해 웹 페이지에 자바 스크립트를 코딩하는 경우가 많습니다. 따라서 웹 브라우저 컨트롤은이를 캡처 할 수 있어야합니다.