繁体   English   中英

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

[英]WinForms TabControl - Add New Tab Button (+)

如何在 Windows Forms 应用程序中的TabControl中添加+按钮。 这是WPF的答案。 但我想要它在 WinForms 应用程序中?

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

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

然后你将有一个如下所示的选项卡控件。 为了拥有更大的选项卡按钮,我对控件应用了填充。

选项卡控件添加按钮

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;
    }
}

防止选择最后一个选项卡

为了防止选择最后一个选项卡,您可以处理控件的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图标。 作为示例,您可以在这篇文章中看到一个实现: TabControl with Close and Add Button

  • 从右到左 (RTL) 支持:您可以在使用所有者绘制选项卡时添加对 RTL 的支持。 这篇文章: 从右到左 TabControl 的 TabPages 的关闭按钮是一种解决方案。

我将添加一个新的 TabPage,然后将 header 设置为“+”,将其名称设置为 newTabPage 并为 TabControl 的 SelectedIndexChanged 添加一个事件。 然后你只需检查是否

tabcontrol.SelectedTab == newTabPage 

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

tabControl.TabPages.Insert(tabControl.TabPages.Count - 1, createdTabPage);
tabControl.SelectedTab = createdTabPage;

根据@Reza Aghaei 的一些改进

  1. 创建一个新表单并将其命名为 formTab(将表单边框样式设置为无)。
  2. 设置 formTab 的控件(这将是在新选项卡中设置的控件)。
  3. go 回到 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;
        }
    }

希望能帮助到你!

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

if(e.TabPageIndex==tabControl1.TabPages.Count-1)
    tabControl1.TabPages.Insert(tabControl1.TabPages.Count - 1,"tab"+e.TabPageIndex);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM