C# .Net fw 3.5,在 TabControl 中的 winform 中,当用户从 TabPage 上的最后一个控件中跳出时,焦点应该移到下一页,并将焦点放在该页面中的第一个控件,我该怎么做?
这对我来说是必要的,因为在主条目表单中,有一些强制性问题放在 tabcontrol 之外,而一些控件在 tabcontrol 中并不是必需的,
如果用户按顺序访问每个控件,则焦点应自动移至下一页,如果用户只想填写必要的信息,则可以通过单击保存按钮提交。
有什么建议吗?
C# .Net fw 3.5,在 TabControl 中的 winform 中,当用户从 TabPage 上的最后一个控件中跳出时,焦点应该移到下一页,并将焦点放在该页面中的第一个控件,我该怎么做?
这对我来说是必要的,因为在主条目表单中,有一些强制性问题放在 tabcontrol 之外,而一些控件在 tabcontrol 中并不是必需的,
如果用户按顺序访问每个控件,则焦点应自动移至下一页,如果用户只想填写必要的信息,则可以通过单击保存按钮提交。
有什么建议吗?
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;
}
}
}
您的问题不准确“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();
}
}
希望它足够清楚