AutoTab для следующей вкладки в TabControl - PullRequest
1 голос
/ 27 сентября 2011

C # .Net fw 3.5, в winform в TabControl, когда вкладка пользователя выходит из последнего элемента управления на вкладке TabPage, то фокус должен переместиться на следующую страницу и сфокусировать первый элемент управления на этой странице, как я могу это сделать?

это необходимо для меня, потому что в основной форме ввода есть некоторые обязательные вопросы, которые находятся за пределами tabcontrol, и некоторые элементы управления, которые не обязательны для всех в tabcontrol,

Если пользователь последовательно просматривает каждый элемент управления, фокус должен автоматически перемещаться на следующие страницы, если пользователь хочет заполнить только необходимую информацию, он может отправить запрос, нажав кнопку Сохранить.

есть предложения по этому поводу.

Ответы [ 2 ]

1 голос
/ 28 сентября 2011
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;
        }
    }
}
0 голосов
/ 27 сентября 2011

Ваш вопрос не точный "C # .Net fw 3.5, в winform в TabControl, когда пользователь вкладывает из последнего элемента управления на TabPage, то фокус должен переместиться на следующую страницу, и фокусируется первый элемент управления на этой странице?»

это утверждение или вопрос.Я не понялаИ какая цель вам нужна?Если вы хотите, чтобы пользователь последовательно посещал элементы управления внутри последующих вкладок, нажимая клавишу Tab, вы можете сделать это с помощью события нажатия клавиши в элементе управления вкладками.В событии с нажатой клавишей вы можете изменить вкладку программно.надеюсь, это поможет.

Код должен быть примерно таким.Сгенерируйте событие нажатия клавиши для вашего 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();
        }
    }

надеюсь, что все достаточно ясно

...