가이에 대한 질문 (one, two, three, four, five)의 많은,하지만 난 그들 모두에서 수정을 시도하고 그들 중 하나가 작동하지 여부를합니까 내 목적에 부합한다. 여기 내 기본 구조입니다 : 승리 양식은 키 입력
User Control
|-Panel
|-Picture Box (several of them, created at runtime, do not exist at design time)
내가 관련되어 있다고 생각하기 때문에
, 패널이 "입력"과 "성장과 축소"로 설정 크기를 조정하는 설정의 독을 가지고, 그래서 항상 전체 사용자 정의 컨트롤을 포함한다. PictureBox는 항상 패널의 일부를 덮지 만 대개 가능하지는 않습니다.나는 특별히 Ctrl + C
을 듣고 있는데, 어떤 아이가 포커스를 가지고 있든 상관없이 응답 할 수있는 방법이 필요합니다. 임의 키 프레스를들을 수있는 메서드가 필요하므로 나중에 확장 할 수 있습니다.
링크 된 페이지에 대한 답변 중 하나는 이러한 키 프레스에 대한 글로벌 수신기를 만드는 것이지 배경 응용 프로그램 인 경우이를 수행하고 싶지 않기 때문에 그렇게하지 않으려 고합니다. 또 다른 방법은 최상위 양식에서이를 감지하고 내 사용자 정의 컨트롤로 필터링하는 것입니다. 문제는 DLL에 User Control이 내장되어 있고, 이것을 사용하여 응용 프로그램을 강제 실행하지 않고 Ctrl + C
을 청취해야한다는 것입니다. 이것은 독자적으로 처리해야하는 문제입니다. 링크 위에서 나
1) 작동하지 않은 이유는
나는 내 UserControl을 true로 설정할 수있는 KeyPreview 속성이 없습니다. 그 질문에 대한 두 번째 대답은 내가했던 ProcessCmdKey를 재정의하는 것이지만 콜백은 내가 무엇을 시도하든 관계없이 호출되지 않는다.
2)이 또한 ProcessCmdKey를 재정의 할 것을 제안합니다. 내가 말했듯이 결코 부름을받지 않습니다.
3) 내가 사실로 설정할 수있는 동의 버튼이 없습니다.
4) KeyDown
과 PreviewKeyDown
콜백이 모두 구현되었으며 둘 중 어느 것도 호출되지 않았습니다.
5) ProcessCmdKey를 제안합니다.
포커스에 관계없이 사용자 컨트롤에서 키 이벤트를 어떻게 검색합니까? 또는, 시도한 위의 방법이 작동해야한다면, 내가 놓친 설정이 작동하지 않도록하고 있습니까?
이것은 내가 본 것 중 가장 해킹이 덜한 것처럼 보입니다. 내가 너의 방식대로 그것을 끝내면 나는 이것을 받아 들일 것이다. – Cody
문제 없습니다. 유용 할 수 있습니다 :) –
작동하게 만드는 이유는'Form'은'ContainerControl'이고'ContainerControl'는'ProcessCmdKey'의'ToolStripManager.ProcessCmdKey' 메소드를 호출하여 비 컨텍스트 메뉴 스트립의 바로 가기를 처리하게 만듭니다 ToolStripManager의 자세한 내용은'ContainerControl.ProcessCmdKey'에 대한 [소스 코드] (http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ContainerControl.cs,2934e842fd63bf41)를 참조하십시오. . –