2011-09-27 3 views
1

TabControl의 winform에서 Tab 키의 마지막 컨트롤에서 사용자 탭을 누르면 포커스가 다음 페이지로 이동하고 첫 번째 컨트롤이 페이지, 어떻게 할 수 있습니까?TabControl의 다음 TabPage에 대한 자동 탭

마스터 입력 양식에있는 TabControl의 측면을 배치 몇 가지 필수 질문, 그리고 모든을 TabControl에서 필요하지 않습니다 일부 컨트롤이 때문에이 나를 ​​위해 필요하다

사용자가 각 컨트롤을 방문하는 경우 순차적으로 다음 페이지로 자동으로 이동해야합니다. 사용자가 필요한 정보 만 채우고 싶다면 저장 버튼을 클릭하여 제출할 수 있습니다.

이 문제에 대한 제안 사항입니다.

+0

이 일반적인 방법으로 탭 키 동작을 재정의 할 매우 어려운 그것의 명확한를 바랍니다. 어리석은 트릭이 작동합니다 : (0, 0) 크기의 버튼을 추가하십시오. Enter 이벤트에서 선택한 다음 컨트롤로 포커스를 설정합니다. –

답변

0

귀하의 질문이 정확하지 않습니다 "TabControl의 winform에서 TabPage의 마지막 컨트롤에서 사용자 탭을 누른 다음 포커스가 다음 페이지로 이동해야하고 첫 번째 컨트롤에 초점을 맞추어야 할 때"C# .Net fw 3.5 그 페이지? "

이것은 진술 또는 질문입니다. 나는 이해하지 못했다. 그리고 당신이 필요로하는 목표는 무엇입니까? 결과적으로 사용자가 탭 키를 눌러 결과 탭 안의 컨트롤을 방문하게하려면 탭 컨트롤에서 키 누르기 이벤트를 사용하십시오. 키 입력 이벤트에서 프로그래밍 방식으로 탭을 변경할 수 있습니다. 도움이 되길 바랍니다.

코드는 다음과 같아야합니다. tabcontrol에 대한 키 누르기 이벤트를 생성하고 Tab 키를 누릅니다.

private void tabControl1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if(e.ToString().Equals("TAB") // I dont know what tab key returns. But is hould be something like this 
     { 
       tabControl1.SelectedTab = tabControl1.TabPages[1] ; 
       // now tabpage 2 has the focus 
       // You can also focus any control you want in here as follows: 
       tabControl1.TabPages[1].Control["control key"].Focus(); 
     } 
    } 

충분히

+0

Tab 키의 마지막 컨트롤에서 탭 키를 누른 다음 포커스가 Tab 컨트롤의 다음 컨트롤로 이동하면 내 Tab 인덱스가 잘 설정되고 커서가 다음 탭 페이지로 포커스를 이동하지 않습니다. 해결책이 있으시면 간단히 설명해주십시오. –

+0

원하는 결과는 무엇입니까? –

+0

나는 세 개의 탭 페이지가있는 tabcontrol을 가지고 있는데, 사용자가 탭 페이지의 마지막 contrl에서 Tab 키를 누른 후 다음 탭 페이지의 다음 첫 번째 컨트롤에 집중해야합니다. –

1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.ComponentModel; 

namespace CSBSSWControls 
{ 
    // Class inhertis TabControl 
    public class bssTabControl : TabControl 
    { 
     private bool AutoTab_; 
     [DefaultValue(false)] 
     public bool AutoTab { get { return AutoTab_; } set { AutoTab_ = value; } } 
     protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     { 
      //property which determines auto change tabpages 
      if (AutoTab) 
      { 
       switch (keyData) 
       { 
        case Keys.Tab | Keys.Shift: 
         { 
          return SetNextTab(false); 
         } 
        case Keys.Tab: 
         { 
          return SetNextTab(true); 
         } 
       } 
      } 
      return base.ProcessCmdKey(ref msg, keyData); 
     } 
     private bool SetNextTab(bool Forward) 
     { 
      // getting cuurent active control 
      ContainerControl CC = this.FindForm(); 
      Control ActC = null; 
      while (CC != null) 
      { 
       ActC = CC.ActiveControl; 
       CC = ActC as ContainerControl; 
      } 
      //checking, current control should not be tabcontrol or tabpage 
      if (ActC != null && !(ActC is TabPage) && !(ActC is bssTabControl)) 
      { 
       //getting current controls next control if it is tab page then current control is surely that last control on that tab page 
       //if shift+tab pressed then checked its previous control, if it is tab page then current control is first control on the current tab page. 
       TabPage NC = ActC.FindForm().GetNextControl(ActC, Forward) as TabPage; 
       if (NC != null) 
        if (this.TabPages.Contains(NC)) 
         if (Forward) 
         { 
          //selecting next tab page 
          this.SelectedTab = NC; 
          return true; 
         } 
         else 
         { 
          if (this.TabPages.IndexOf(NC) > 0) 
          { 
           //selecting pervious tab page 
           this.SelectedIndex = this.TabPages.IndexOf(NC) - 1; 
           return true; 
          } 
         } 
      } 
      return false; 
     } 
    } 
} 
관련 문제