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

时间:2016-11-16 10:52:47

标签: c# winforms tabcontrol

enter image description here

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

这意味着您无法通过单击其他选项卡切换到其他标签页。

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

tabControl1.SelectedTab = tabPage2;

4 个答案:

答案 0 :(得分:6)

TabControls Selecting事件将禁用切换,但我们需要跟踪具有click值的按钮bool,否则按钮的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上的标签页):)

enter image description here

希望有所帮助,

答案 1 :(得分:2)

试试这个

tabControl1.SelectTab(tabPage2);

索引

tabControl1.SelectTab(1); 

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

答案 2 :(得分:1)

您可以将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); } } 设置为true。这样您就可以在标签页上禁用鼠标。

顺便说一句,只是禁用点击标题是不够的,您需要禁用允许用户切换到标签之间的键,例如 Shift + Tab Ctrl + Shift + Tab Home < / kbd>和结束

TCM_ADJUSTRECT

注意:如果您希望拥有类似向导的控件(不带标题的标签控件),则可以像this那样处理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); } } 。您也应该在该解决方案中禁用这些密钥。这是一个更改版本:

{{1}}

答案 3 :(得分:0)

其中一种选择是尝试简单的IsHitTestVisible="False"