簡體   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