通过TabControl中的单击或键禁用选项卡之间的切换

在此处输入图像描述

那么伙计们,是否可以通过NEXT按钮切换到另一个标签?

这意味着您无法通过单击其他选项卡切换到另一个选项卡页面。

我通常在NEXT按钮上使用的代码是这样的:

tabControl1.SelectedTab = tabPage2; 

您可以将ControlStyles.UserMouse设置为true。 这样您就可以简单地禁用选项卡标题上的鼠标。

顺便说一句,只是禁用点击标题是不够的,您需要禁用允许用户切换到标签之间的键,如Shift + TabCtrl + Shift + TabHomeEnd

 using System.Linq; using System.Windows.Forms; using System.ComponentModel; public class MyTabControl : TabControl { public MyTabControl() { if (LicenseManager.UsageMode != LicenseUsageMode.Designtime) SetStyle(ControlStyles.UserMouse, true); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { var filteredKeys = new Keys[]{(Keys.Control | Keys.Tab), (Keys.Control | Keys.Shift | Keys.Tab), Keys.Left, Keys.Right, Keys.Home, Keys.End}; if (filteredKeys.Contains(keyData)) return true; return base.ProcessCmdKey(ref msg, keyData); } } 

注意:如果您希望拥有类似向导的控件(没有标题的选项卡控件),您可以像这样处理TCM_ADJUSTRECT 。 您也应该在该解决方案中禁用这些密钥。 这是一个更改版本:

 using System.Linq; using System.Windows.Forms; using System.ComponentModel; public class WizardControl: TabControl { protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { var filteredKeys = new Keys[]{(Keys.Control | Keys.Tab), (Keys.Control | Keys.Shift | Keys.Tab), Keys.Left, Keys.Right, Keys.Home, Keys.End}; if (filteredKeys.Contains(keyData)) return true; return base.ProcessCmdKey(ref msg, keyData); } public const int TCM_FIRST = 0x1300; public const int TCM_ADJUSTRECT = (TCM_FIRST + 40); protected override void WndProc(ref Message m) { if (m.Msg == TCM_ADJUSTRECT && !DesignMode) m.Result = (IntPtr)1; else base.WndProc(ref m); } } 

TabControls Selecting事件将禁用切换,但我们需要使用bool值跟踪按钮的click ,否则按钮的click也不会选择选项卡。

 bool checkCancel = true; private void button2_Click(object sender, EventArgs e) { checkCancel = false; tabControl1.SelectTab("tabPage2"); } private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) { e.Cancel = checkCancel; checkCancel = true; } 

结果, (顺便说一下,试图点击gif上的tabpages :))

在此处输入图像描述

希望有帮助,

试试这个

 tabControl1.SelectTab(tabPage2); 

关于指数

 tabControl1.SelectTab(1); 

Tablist是基于0的索引,因此“1”是第二个选项卡。