2011-08-20 3 views
1

VS 2008을 실행하고 Windows 7 상자에 내 응용 프로그램을 빌드하고 있습니다.KeyDown 키가 눌러지지 않을 때 VB.Net에서 이벤트 발생

Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown 
    MsgBox("control = " + e.Control.ToString + ", shift = " + e.Shift.ToString + ", e.Keycode = " + e.KeyCode.ToString) 

을 내가 잘 실행하는 것을 구축하고 VS 내에서 실행하는 경우 : 그 안에 다음과 같이 기본 폼/창은 KeyDown 이벤트 핸들러를 가지고있다. messagebox는 내가 누른 키의 키 코드와 함께 컨트롤 및 시프트 키의 상태와 함께 나타납니다. 그러나 실행 파일을 가져 와서 기본 폼이 열리 자마자 XP 상자 (.Net 런타임 3.5 사용)에서 실행하면 메시지 상자가 나타납니다. 기본적으로 "KeyDown"이벤트는 키를 누를 필요없이 시작됩니다. messagebox는 "control = False, shift = False, e.Keycode = None"과 함께 다시 나타납니다.

어떻게 가능합니까? 어떤 키도 누르지 않았을 때 keyDown 이벤트가 발동 될 수 있습니까? (메시지 상자에 포함 된 출력에 의해 확인 됨)

무슨 일이 일어나고 있는지 또는 XP 상자에서 어떻게 진단 할 수 있는지에 대한 제안 사항 Visual Studio가 설치되어 있지 않습니까?

업데이트 "form1"만있는 새 프로젝트를 만들려고했는데 그 뒤에 유일한 코드는 keyDown 이벤트 처리기입니다. 그냥 빈 창이 열리고 키를 누르면 메시지 상자가 팝업됩니다. Windows 7 상자에서 예상대로 작동하지만 XP 실행 파일을 이동하면 즉시 키를 누르지 않고 메시지 상자를 열었습니다. 아주 이상한.

+0

업데이트 ... "form1"만있는 새로운 프로젝트를 만들려고했는데 그 뒤에 유일한 코드는 keyDown 이벤트 처리기입니다. 그냥 빈 창이 열리고 키를 누르면 메시지 상자가 팝업됩니다. Windows 7 상자에서 예상대로 작동하지만 XP 실행 파일을 이동하면 즉시 키를 누르지 않고 메시지 상자를 열었습니다. 아주 이상한. – GregH

+0

추가 설명에 주석을 추가하지 말고 원래 질문 –

+0

시작 + 실행, Taskmgr.exe, 프로세스 탭을 업데이트하십시오. 문제가있는 사람을 찾을 때까지 하나씩 프로세스가 종료됩니다. –

답변

0

이 일을하는 가장 좋은 방법은 아래의 예처럼, 양식에 대한 ProcesCmdKey을 무시하는 것입니다

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean 
    MessageBox.Show("Pressed" & Convert.ToChar(keyData)) 
    Return MyBase.ProcessCmdKey(msg, keyData) 
End Function 

감사합니다.

+0

글쎄, 나는 이것을 시도하고 여전히 발사하고있다. 내 KeyDown 처리기를 주석 처리하고 함수를 넣습니다. 다시, Win 7 상자에서 이벤트는 키를 누를 때만 발생합니다. 그러나, 내 생산 XP의 상자에서 아무 키도 누르면 화재가 발생합니다. – GregH

+0

메시지 상자에 "keyData.ToString"을 출력하면 다음과 같이 표시됩니다 : "Press LButton, OemClear" – GregH

0

가끔씩 .Net 컨트롤이 양식 또는 앱 초기화를 실행합니다. Microsoft는 이것이 "설계 상"이라고 말합니다. 문제가있는 경우 플래그 변수를 사용하여 양식이로드 될 때까지 keydown 핸들러의 모든 처리를 중단 할 수 있습니다.

관련 문제