1 Востаннє редагувалося Betterthanyou (21.01.2020 12:02:45)

Тема: TabControl, Додати Control до TabControl

Потрібно зробити можливість закриття вкладки в TabControl за допомогою кнопки у вигляді хрестика

це має виглядати як у браузері хром

Якщо вкладок мало хрестик з'являється на кожній вкладці,
а якщо багато - хрестик з'являється лише на активній.

Я хотів у конструкторі створити кнопку

public class CustomTabControl : TabControl
{
    ButtonX buttonX = new ButtonX();
    public CustomTabControl()
    {
        SizeMode = TabSizeMode.Normal;
        ItemSize = new Size(150, 23);
        DrawMode = TabDrawMode.OwnerDrawFixed;

        Controls.Add(buttonX);
        buttonX.Show();
        buttonX.BringToFront();
    }
...

У події OnDrawItem відображати її у правильному місці

protected override void OnDrawItem(DrawItemEventArgs e)
{
    base.OnDrawItem(e);

    if (SelectedTab == TabPages[e.Index])
    {
        buttonX.Location = SelectedTab.Location;
    }
...

Але виникає помилка:

An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll

Additional information: Cannot add 'ButtonX' to TabControl.  Only TabPages can be directly added to TabControls.

Якщо не додавати кнопку в Controls "Controls.Add()" то вона не відображається.

Як створити кнопку і розмістити її на вкладці ?

Як картинку ?

Я знаю що Graphics.DrawImage може намалювати хрестик, але в такому випадку мені прийдеться описувати функціонал кнопки заново, тому я хочу використати саме кнопку, а не картинку (щоб уникнути написання функціоналу кнопки заново).

Мені відомо що вже є готові рішення наприклад EasyTabs, але цікаво було б самому це зробити.

2

Re: TabControl, Додати Control до TabControl

якось так https://www.codeguru.com/csharp/.net/ne … -.net.html

Подякували: Betterthanyou1

3

Re: TabControl, Додати Control до TabControl

Betterthanyou написав:

Як створити кнопку і розмістити її на вкладці ?
...
я хочу використати саме кнопку, а не картинку

Будь-які спроби використати вже існуючий TabControl будуть як прикручування костилів до велосипеда.
Треба створити свій власний контрол (нащадок Control або UserControl) і повністю прописати його поведінку і відрисовку, це не складно, але займе часу більше ніж хотілось би.

Подякували: Betterthanyou1