pha*_*pha 3 c# tabcontrol winforms

那么伙计们,是否可以通过NEXT按钮切换到另一个标签?
这意味着您无法通过单击其他选项卡切换到另一个选项卡页面.
我通常在NEXT按钮上使用的代码是这样的:
tabControl1.SelectedTab = tabPage2;
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
结果,(顺便说一下,试图点击gif上的tabpages :))
希望有帮助,
您可以设置ControlStyles.UserMouse为true。这样您就可以简单地在选项卡标题上禁用鼠标。
顺便说一句,仅禁用标题上的单击是不够的,您需要禁用允许用户在选项卡之间切换的键,例如Shift+ Tab、Ctrl+ Shift+ Tab、\xe2\x86\x90、\xe2\x86\x92和HomeEnd顺便说一句,仅禁用标题上的单击是不够的,您需要禁用允许用户在选项卡
\n\nusing System.Linq;\nusing System.Windows.Forms;\nusing System.ComponentModel;\npublic class MyTabControl : TabControl\n{\n public MyTabControl()\n {\n if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)\n SetStyle(ControlStyles.UserMouse, true);\n }\n protected override bool ProcessCmdKey(ref Message msg, Keys keyData)\n {\n var filteredKeys = new Keys[]{(Keys.Control | Keys.Tab),\n (Keys.Control | Keys.Shift | Keys.Tab),\n Keys.Left, Keys.Right, Keys.Home, Keys.End};\n if (filteredKeys.Contains(keyData))\n return true;\n return base.ProcessCmdKey(ref msg, keyData);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n注意:如果你喜欢有一个类似向导的控件(没有标题的选项卡控件),你可以这样TCM_ADJUSTRECT处理处理。您也应该在该解决方案中禁用这些键。这是更改后的版本:
using System.Linq;\nusing System.Windows.Forms;\nusing System.ComponentModel;\npublic class WizardControl: TabControl\n{\n protected override bool ProcessCmdKey(ref Message msg, Keys keyData)\n {\n var filteredKeys = new Keys[]{(Keys.Control | Keys.Tab),\n (Keys.Control | Keys.Shift | Keys.Tab),\n Keys.Left, Keys.Right, Keys.Home, Keys.End};\n if (filteredKeys.Contains(keyData))\n return true;\n return base.ProcessCmdKey(ref msg, keyData);\n }\n public const int TCM_FIRST = 0x1300;\n public const int TCM_ADJUSTRECT = (TCM_FIRST + 40);\n protected override void WndProc(ref Message m)\n {\n if (m.Msg == TCM_ADJUSTRECT && !DesignMode)\n m.Result = (IntPtr)1;\n else \n base.WndProc(ref m);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |