Вы можете добавить новую вкладку в конец вкладок элемента управления и установить для нее текст +
, а затем:
- Проверьте, не нажал ли пользователь последнюю вкладку, затем вставьте новую вкладку перед ней.
- Вы должны запретить выбор последней вкладки.
- Вы должны отрегулировать ширину вкладок и позволить последней вкладке иметь меньшую ширину.
Тогда у вас будет элемент управления вкладкой, как показано ниже. Чтобы иметь большие кнопки табуляции, я применил отступ к элементу управления.
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 при использовании вкладки владельца-рисования. Здесь является решением.