WinForms TabControl - кнопка добавления новой вкладки (+) - PullRequest
6 голосов
/ 18 июля 2011

Как добавить кнопку + к TabControl в приложении Windows Forms. Вот ответ для WPF . Но я хочу это в приложении WinForms?

Ответы [ 4 ]

6 голосов
/ 18 июля 2011

Я хотел бы добавить новую TabPage, затем установить заголовок на «+», установить его имя в newTabPage и добавить событие для SelectedIndexChanged для TabControl.Затем вы просто проверяете, если

tabcontrol.SelectedTab == newTabPage 

, и если это так, вы можете создать новую TabPage, вставить ее в tabControl и установить в качестве SelectedTab, например:

tabControl.TabPages.Insert(tabControl.TabPages.Count - 1, createdTabPage);
tabControl.SelectedTab = createdTabPage;
5 голосов
/ 30 апреля 2016

Вы можете добавить новую вкладку в конец вкладок элемента управления и установить для нее текст +, а затем:

  • Проверьте, не нажал ли пользователь последнюю вкладку, затем вставьте новую вкладку перед ней.
  • Вы должны запретить выбор последней вкладки.
  • Вы должны отрегулировать ширину вкладок и позволить последней вкладке иметь меньшую ширину.

Тогда у вас будет элемент управления вкладкой, как показано ниже. Чтобы иметь большие кнопки табуляции, я применил отступ к элементу управления.

Tab Control Add Button

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 при использовании вкладки владельца-рисования. Здесь является решением.

0 голосов
/ 01 сентября 2018

Некоторые улучшения в соответствии с @Reza Aghaei

  1. Создайте новую форму и назовите ее formTab (установите стиль границы формы равным none).
  2. Установите элементы управления formTab (этобудут элементы управления, установленные в новой вкладке).
  3. вернитесь в 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;
        }
    }

надеюсь, это поможет!

0 голосов
/ 18 июля 2011

Создайте вкладку с тегом «+», используйте событие «tabControl1_Selecting» и код такой:

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