自动选项卡到下一个选项卡页在选项卡控制
本文关键字:选项 控制 下一个 | 更新日期: 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;
}
}
}