自动选项卡到下一个选项卡页在选项卡控制

本文关键字:选项 控制 下一个 | 更新日期: 2023-09-27 18:09:41

c# .Net fw 3.5, in winform in TabControl,当用户从TabPage上的最后一个控件中选择选项卡时,那么焦点应该移动到下一页,并将焦点放在该页中的第一个控件上,我该怎么做?

这对我来说是必要的,因为在主输入表单中,有一些必填项被放在tabcontrol之外,还有一些不必要的控件都在tabcontrol中,

如果用户依次访问每个控件,那么焦点应该自动移动到下一页,如果用户只想填写必要的信息,那么他可以通过点击保存按钮提交。

对此有什么建议吗?

自动选项卡到下一个选项卡页在选项卡控制

你的问题不准确"c# .Net fw 3.5,在winform的TabControl中,当用户退出TabPage上的最后一个控件时,那么焦点应该移动到下一页,并关注该页中的第一个控件?"

是陈述句还是疑问句?我不明白。你需要的目标是什么?如果您希望用户通过按tab键来访问后续选项卡中的控件,您可以通过tab控件中的keypressed事件来实现。在按下键的事件中,您可以以编程方式更改选项卡。希望能有所帮助。

代码应该像这样。生成按键事件为您的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();
        }
    }

希望够清楚

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;
        }
    }
}