WinForms TabControl - 添加新标签按钮(+)

clu*_*ter 6 c# tabs tabcontrol button winforms

如何在Windows窗体应用程序中添加+按钮TabControl.这是WPF的答案.但我想在WinForms应用程序中使用它?

小智 6

我将添加一个新的TabPage,然后将标题设置为"+",将其名称设置为newTabPage并为TabControl的SelectedIndexChanged添加一个事件.然后你只是检查一下

tabcontrol.SelectedTab == newTabPage 
Run Code Online (Sandbox Code Playgroud)

如果是这种情况你可以创建一个新的TabPage,将其插入tabControl并将其设置为SelectedTab,如:

tabControl.TabPages.Insert(tabControl.TabPages.Count - 1, createdTabPage);
tabControl.SelectedTab = createdTabPage;
Run Code Online (Sandbox Code Playgroud)


Rez*_*aei 5

您可以在控件选项卡的末尾添加一个新选项卡,并将其设置为+,然后:

  • 检查用户是否单击了最后一个选项卡,然后在其前面插入新选项卡.
  • 您应该阻止选择最后一个选项卡.
  • 您应该调整选项卡的宽度,让最后一个选项卡的宽度更小.

然后你将有一个像下面的选项卡控件.为了有更大的选项卡按钮,我已经为控件应用了填充.

选项卡控件添加按钮

Hanlde单击"最后一个"选项卡

您可以处理MouseDownMouseClick事件并检查最后一个选项卡矩形是否包含鼠标单击的点,然后在最后一个选项卡之前插入一个选项卡:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

防止最后一个标签的选择

要防止选择最后一个选项卡,您可以处理Selecting控制事件并检查选择选项卡是否为最后一个选项卡,取消该事件:

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPageIndex == this.tabControl1.TabCount - 1)
        e.Cancel = true;
}
Run Code Online (Sandbox Code Playgroud)

调整标签的宽度

要调整选项卡宽度并让最后一个选项卡具有较小的宽度,您可以处理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);
}
Run Code Online (Sandbox Code Playgroud)

注意

  • 您可以简单地将逻辑封装在派生中,TabContol并创建一个支持添加选项卡的自定义选项卡控件.

  • 此外,您可以简单地使控件所有者绘制和处理选项卡绘制,以在选项卡上显示+图标和X图标.作为示例,您可以在此处查看实现.

  • 使用所有者绘制选项卡时,可以添加对RTL的支持.是一个解决方案.


Ova*_*tri 0

创建一个带有标签“+”的选项卡,并使用“tabControl1_Selecting”事件,代码如下:

if(e.TabPageIndex==tabControl1.TabPages.Count-1)
    tabControl1.TabPages.Insert(tabControl1.TabPages.Count - 1,"tab"+e.TabPageIndex);
Run Code Online (Sandbox Code Playgroud)