1

C# .Net fw 3.5,在 TabControl 中的 winform 中,当用户从 TabPage 上的最后一个控件中跳出时,焦点应该移到下一页,并将焦点放在该页面中的第一个控件,我该怎么做?

这对我来说是必要的,因为在主条目表单中,有一些强制性问题放在 tabcontrol 之外,而一些控件在 tabcontrol 中并不是必需的,

如果用户按顺序访问每个控件,则焦点应自动移至下一页,如果用户只想填写必要的信息,则可以通过单击保存按钮提交。

有什么建议吗?

4

2 回答 2

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;
        }
    }
}
于 2011-09-28T06:49:14.923 回答
1

您的问题不准确“C# .Net fw 3.5,在 TabControl 中的 winform 中,当用户从 TabPage 上的最后一个控件中跳出时,焦点应该移到下一页,并将焦点放在该页面中的第一个控件?”

这是一个陈述还是一个问题。我不明白。你需要的目标是什么?如果您希望用户通过按 Tab 键访问后续选项卡内的控件,您可以通过选项卡控件中的按键事件来完成。在按键事件中,您可以以编程方式更改选项卡。希望能帮助到你。

代码应该是这样的。为您的选项卡控件生成按键事件并监视 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();
        }
    }

希望它足够清楚

于 2011-09-27T12:10:49.227 回答