WinForms TabControl – 添加新标签按钮(+)
如何在Windows窗体应用程序中向TabControl
添加+
按钮。 这是WPF的答案。 但是我想在WinForms应用程序中使用它?
我将添加一个新的TabPage,然后将标题设置为“+”,将其名称设置为newTabPage并为TabControl的SelectedIndexChanged添加一个事件。 然后你只是检查一下
tabcontrol.SelectedTab == newTabPage
如果是这种情况你可以创建一个新的TabPage,将其插入tabControl并将其设置为SelectedTab,如:
tabControl.TabPages.Insert(tabControl.TabPages.Count - 1, createdTabPage); tabControl.SelectedTab = createdTabPage;
您可以在控件选项卡的末尾添加一个新选项卡,并将其文本设置为+
,然后:
- 检查用户是否单击了最后一个选项卡,然后在其前面插入新选项卡。
- 您应该阻止选择最后一个选项卡。
- 您应该调整选项卡的宽度,让最后一个选项卡的宽度更小。
然后你将有一个如下所示的选项卡控件。 为了有更大的标签按钮,我已经为控件应用了填充。
Hanlde点击最后一个标签
您可以处理MouseDown
或MouseClick
事件,并检查最后一个选项卡矩形是否包含鼠标单击的点,然后在最后一个选项卡之前插入选项卡:
private void tabControl1_MouseDown(object sender, MouseEventArgs e) { var lastIndex = this.tabControl1.TabCount - 1; if (this.tabControl1.GetTabRect(lastIndex).Contains(e.Location)) { this.tabControl1.TabPages.Insert(lastIndex, "New Tab"); this.tabControl1.SelectedIndex = lastIndex; } }
防止最后一个标签的选择
要防止选择最后一个选项卡,您可以处理Selecting
控制事件并检查选择选项卡是否是最后一个选项卡,取消该事件:
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) { if (e.TabPageIndex == this.tabControl1.TabCount - 1) e.Cancel = true; }
调整标签的宽度
要调整选项卡宽度并让最后一个选项卡具有较小的宽度,您可以处理HandleCreated
事件并将TCM_SETMINTABWIDTH
发送到控件并指定选项卡宽度允许的最小大小:
[DllImport("user32.dll")] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); private const int TCM_SETMINTABWIDTH = 0x1300 + 49; private void tabControl1_HandleCreated(object sender, EventArgs e) { SendMessage(this.tabControl1.Handle, TCM_SETMINTABWIDTH, IntPtr.Zero, (IntPtr)16); }
注意
-
您可以简单地将逻辑封装在派生的
TabContol
并创建一个支持添加选项卡的自定义选项卡控件。 -
此外,您可以简单地使控件所有者绘制和处理选项卡绘制以在选项卡上显示
+
图标和X
图标。 作为示例,您可以在此处查看实现。 -
使用所有者绘制选项卡时,可以添加对RTL的支持。 这是一个解决方案。
创建一个标签为“+”的选项卡,并使用“tabControl1_Selecting”事件和代码:
if(e.TabPageIndex==tabControl1.TabPages.Count-1) tabControl1.TabPages.Insert(tabControl1.TabPages.Count - 1,"tab"+e.TabPageIndex);
根据@Reza Aghaei的一些改进
- 创建一个新表单并将其命名为formTab(将表单boarder样式设置为none)。
- 设置formTab的控件(这将是新选项卡中设置的控件)。
- 返回tabcontrol并添加一个新选项卡,将其命名为“+”(确保此选项卡是tabcontrol的结尾 )。
你的表单应该看起来像这样: form1 formTab
现在输入以下代码:
private void Form1_Load(object sender, EventArgs e) { TabPage tab = tabControl1.TabPages[0]; var newTab = new formTab(); newTab.TopLevel = false; newTab.Dock = DockStyle.Fill; newTab.Show(); newTab.Visible = true; tab.Controls.Add(newTab); } private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) { var tabAdd = tabControl1.TabCount - 1; if (tabControl1.SelectedIndex == tabAdd) { //create a new tabpage var t = new TabPage(); //create a new formTab with webControl in it var newTab = new formTab(); //show the new formTab newTab.Show(); newTab.TopLevel = false; newTab.Dock = DockStyle.Fill; newTab.Visible = true; //add formTab as new control in the tabpage just created t.Controls.Add(newTab); //insert the new created tab into tab control and before tabLoc tabControl1.TabPages.Insert(tabAdd, t); //select the new created tab var newCreatedTab = tabControl1.TabCount - 2; tabControl1.SelectedIndex = newCreatedTab; } }
希望能帮助到你!