通过TabControl中的单击或键禁用选项卡之间的切换
那么伙计们,是否可以通过NEXT按钮切换到另一个标签?
这意味着您无法通过单击其他选项卡切换到另一个选项卡页面。
我通常在NEXT按钮上使用的代码是这样的:
tabControl1.SelectedTab = tabPage2;
您可以将ControlStyles.UserMouse
设置为true。 这样您就可以简单地禁用选项卡标题上的鼠标。
顺便说一句,只是禁用点击标题是不够的,您需要禁用允许用户切换到标签之间的键,如Shift + Tab , Ctrl + Shift + Tab , ← , → , Home和End 。
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”是第二个选项卡。