2014-05-14 2 views
0

키보드로 작동하는 사용자 정의 컨트롤을 만들었습니다. 나는 키보드와 똑같은 방식으로 컨트롤에 버튼을 배열하고 (ControlStyles.Selectable, false)을 설정했습니다. 이렇게하면 사용자가 부모 폼에서 선택한 텍스트 상자에 포커스를 유지할 수 있습니다. 또한 사용자 정의 컨트롤의 스타일을 선택할 수 없게 설정했습니다. 사용자가 버튼을 누를 때 모든 것이 잘 작동하지만 사용자 컨트롤이 클릭되면 텍스트 상자에서 포커스를 훔칩니다.사용자 정의 컨트롤이 포커스를 훔치지 않게하는 방법은 무엇입니까?

public partial class TouchKeyboard : UserControl 
    { 
     public TouchKeyboard() 
     { 
      InitializeComponent(); 
      SetStyle(ControlStyles.Selectable, false); 

     } 

     private void TouchKeyboard_Load(object sender, EventArgs e) 
     { 
      foreach (var button in this.Controls.OfType<CustomControls.CustomButton>()) 
      { 
       button.Click += new EventHandler(this.ButtonClick); 
      } 
     } 

     private void ButtonClick(object sender, EventArgs e) 
     { 
      var button = sender as CustomControls.CustomButton; 

      if (button.Name == "btnSpace") 
      { 
       SendKeys.Send(" "); 
      } 
      else 
      { 
       SendKeys.Send("{" + button.Text + "}"); 
      } 
     } 
    } 

왜 내 사용자 정의 컨트롤 ControlStyles.Selectable가 false로 설정하면 초점을 훔치는 것 : 여기 내 코드는?

+0

마지막으로 사용한 포커스 요소 (** UserControl ** 또는 그 안의 항목 제외)를 추적하면 어떨까요? 예를 들어 ** UserControl **에 새로운 ** Control lastFocusedElement ** 속성을 만들고 ** ButtonClick **에서 할당 된 경우이를 확인하고 ** lastFocusedElement.Activate() ** 요소를 버튼 클릭 메서드의 끝? – W0lfw00ds

답변

0

몇 일간의 실수로 마침내 알아 냈습니다. 패널이 포커스를 훔치지 않기 때문에 사용자 컨트롤에 패널을 도킹하고 내부에 버튼을 배치했습니다. 문제가 해결되었습니다.

관련 문제