2012-01-19 5 views
2

나는 정상적인 닷넷 버튼에서 파생 된 사용자 정의 버튼을 만든 짧은 컷 키 조합을 추가하려면 다음 속성을 추가 한 :화재 버튼 클릭 이벤트

public Keys ShortCutKey { get; set; } 

나는이 원하는을 단추의 클릭 이벤트를 발생시키는 조합은 버튼을 폼에 배치 할 때 구현하는 방법을 모릅니다. 바로 가기 키를 수행하는 표준 방법은 바로 가기 문자 앞에 &을 사용하는 것이지만 키 조합을 사용해야한다는 것을 알고 있습니다.

아이디어가 있으십니까?

많은 감사

+1

WinForms 또는 WPF? – ChrisF

+1

입력 바인딩을 살펴보십시오. http://msdn.microsoft.com/en-us/library/system.windows.input.inputbinding.aspx –

답변

1

양식의 ProcessCmdKey() 메서드를 재정 의하여 바로 가기 키 입력을 검색합니다. 이렇게 :

private bool findShortCut(Control.ControlCollection ctls, Keys keydata) { 
     foreach (Control ctl in ctls) { 
      var btn = ctl as MyButton; 
      if (btn != null && btn.ShortCutKey == keydata) { 
       btn.PerformClick(); 
       return true; 
      } 
      if (findShortCut(ctl.Controls, keydata)) return true; 
     } 
     return false; 
    } 

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (findShortCut(this.Controls, keyData)) return true; 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 

여기서 MyButton은 사용자 지정 단추 컨트롤 클래스로 간주됩니다.

+0

그래, 할 수 있지만 버튼과 폼이 많은 경우 각각에 대해 수행해야합니다. 폼의 단추를 놓고 속성 패널을 통해 단축키를 설정할 수 있어야합니다. 따라서 버튼 클래스 내에 모든 코드가 필요합니다. – user1131661

+0

버튼을 찾기 위해 컨트롤을 반복하십시오. 소식이 업데이트되었습니다. –

+0

좋습니다. 나는 너의 제안을 사용했다. 도와 주셔서 감사합니다 – user1131661

0

당신은 앰퍼샌드 문자 바로 가기 문자를 표시하기 위해 윈폼 컨트롤 캡션에 사용되는 점을 감안 윈폼을 사용하고 있으리라 믿고있어. 이 경우 Click 이벤트를 수동으로 실행하려면 WinForms Button에서 Button.PerformClick() 메서드를 사용할 수 있습니다.

사실이 아니라면 사실 WPF를 사용하고 있습니다. 그런 다음 Dmitry 링크가 WPF Input Bindings에 대한 그의 의견에 올랐습니다.

+0

답장을 보내 주셔서 감사합니다. – user1131661

+0

답장을 보내 주셔서 감사합니다. 예 저는 WinForms를 사용하고 있습니다. 나는 아직도 Button.PerformClick이 어떻게 해고 될지 이해하지 못합니까? 키 조합을 캡처하기 위해 단추가있는 각 폼에 코드를 작성해야합니다. 내 사용자 지정 단추를 어떤 형식 으로든 배치 할 수 있고 개발자가 속성 창에서 키 조합을 설정할 수있게하려고합니다. 그런 다음 폼에 코드를 추가하지 않고도 클릭 이벤트를 발생시키는 조합이 필요합니다. 희망은 그 말이 맞습니다. 감사합니다 – user1131661

+0

@ user1131661 내가 이해하는 바에 따르면 사용자 정의 버튼 구현 내에서 키보드 이벤트를 수신 한 다음 지정된 바로 가기 조합을 누르면 'Click' 이벤트가 발생하여이를 달성 할 수 있어야합니다. 이 경우 사용자 정의 버튼 구현 내에 * 단축키 조합을 저장하고 속성을 통해 노출되는 것이 가장 좋습니다. 그게 전혀 도움이 되나요? –