2009-12-09 6 views
2

Iam은 이러한 문제에 직면했습니다. 극복하기가 어렵습니다. WinForms에서 n TabPages로 TabControl을 얻었다. Ctrl + Tab/Ctrl + Shift + Tab 전환을 확장하고 싶습니다. 그래서 포커스가 TabControl이나 Form에있는 한 제대로 작동하는 코드를 작성했습니다. 응용 프로그램 포커스가 TabPage의 안쪽 (예 : TabPage 내부에 배치 된 단추) 일 때 Ctrl + Tab을 누르면 코드가 무시되고 TabControl이 TabPage로 건너 뜁니다 (코드 생략).TabControl에서 C# Tab 전환

누구나 아이디어가 있으십니까?

+0

전환 확장 방법에 대해 자세히 설명해 주시겠습니까? –

+0

Ive가 Form KeyUp/KeyDown에 대한 이벤트 처리기를 추가했습니다. – Piglet

+0

Form.KeyPreview = ...? –

답변

4

Ctrl-Tab 동작을 재정의하려면 TabControl에서 파생되고 ProcessCmdKey, 가상 메서드를 재정의해야합니다.

예 :

public class ExtendedTabControl: TabControl 
{ 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == (Keys.Control | Keys.Tab)) 
     { 
      // Write custom logic here 
      return true; 
     } 
     if (keyData == (Keys.Control | Keys.Shift | Keys.Tab)) 
     { 
      // Write custom logic here, for backward switching 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 
1

을 TabControl Tab 키를 처리 할 수있는 매우 특별한 처리가 있습니다. ProcessKeyPreview() 메서드를 재정 의하여 Ctrl/Shift/Tab을 감지 한 다음 OnKeyDown() 메서드에서 탭 선택 항목을 구현합니다. 이렇게하면 자식 컨트롤뿐만 아니라 포커스 자체가있을 때도 키 입력을 감지 할 수 있습니다. 또한 자식 컨트롤 중 하나를 사용하여 사용자 지정 Tab 키 처리를 수행하지 않도록합니다. ProcessCmdKey()를 재정 의하여 작동하도록 만들 수 있지만 탭에 응답 할 자식 컨트롤을 중단합니다.

가장 좋은 방법은 OnKeyDown() 메서드를 재정의하는 것입니다. 프로젝트에 새 클래스를 추가하고 아래 표시된 코드를 붙여 넣습니다. 엮다. 새 탭 컨트롤을 도구 상자의 위쪽에서 폼으로 끌어다 놓습니다.

using System; 
using System.Windows.Forms; 

class MyTabControl : TabControl { 
    protected override void OnKeyDown(KeyEventArgs e) { 
    if (e.KeyCode == Keys.Tab && (e.KeyData & Keys.Control) != Keys.None) { 
     bool forward = (e.KeyData & Keys.Shift) == Keys.None; 
     // Do your stuff 
     //... 
    } 
    else base.OnKeyDown(e); 
    } 
} 

Ctrl + PageUp 및 Ctrl + PageDown도 고려해야합니다.

관련 문제