Зміст

TabControl в C#

Вступ в TabControl

TabControl - компонент Windows Forms для створення інтерфейсу з вкладками. Дозволяє організувати вміст на кількох сторінках, економлячи місце на формі.

Вкладка 1
Вкладка 2
Вкладка 3
Вміст активної вкладки
Основне застосування: налаштування програми, багатосторінкові форми, організація складних інтерфейсів.

Основні властивості

  • TabPages
    Колекція вкладок
  • SelectedTab
    Поточна обрана вкладка
  • SelectedIndex
    Індекс обраної вкладки
  • Alignment
    Розташування вкладок (Top, Bottom, Left, Right)
  • Multiline
    Багаторядкове відображення вкладок
  • Appearance
    Зовнішній вигляд вкладок (Normal, Buttons, FlatButtons)

Створення та базова настройка

Програмне створення

// Створення TabControl
TabControl tabControl1 = new TabControl();
tabControl1.Location = new Point(10, 10);
tabControl1.Size = new Size(400, 300);
tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom |
    AnchorStyles.Left | AnchorStyles.Right;

// Додавання на форму
this.Controls.Add(tabControl1);

Додавання вкладок

// Створення вкладок
TabPage tabPage1 = new TabPage("Основні налаштування");
TabPage tabPage2 = new TabPage("Додатково");
TabPage tabPage3 = new TabPage("Про програму");

// Додавання вкладок до TabControl
tabControl1.TabPages.Add(tabPage1);
tabControl1.TabPages.Add(tabPage2);
tabControl1.TabPages.Add(tabPage3);

// Масове додавання
tabControl1.TabPages.AddRange(new TabPage[] {
    tabPage1, tabPage2, tabPage3
});

Робота з вкладками

Доступ до вкладок

// За індексом
TabPage firstTab = tabControl1.TabPages[0];

// За іменем
TabPage settingsTab = tabControl1.TabPages["tabPageSettings"];

// За текстом заголовка
foreach (TabPage tab in tabControl1.TabPages) {
    if (tab.Text == "Налаштування") {
        // Знайдено потрібну вкладку
        break;
    }
}

Управління вкладками

// Додавання елементів на вкладку
Button button1 = new Button();
button1.Text = "Кнопка на вкладці";
button1.Location = new Point(20, 20);
tabPage1.Controls.Add(button1);

// Видалення вкладки
tabControl1.TabPages.Remove(tabPage2);

// Видалення за індексом
tabControl1.TabPages.RemoveAt(0);

// Очищення всіх вкладок
tabControl1.TabPages.Clear();

Події TabControl

SelectedIndexChanged

// Зміна активної вкладки
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) {
    if (tabControl1.SelectedTab != null) {
        string tabName = tabControl1.SelectedTab.Text;
        statusLabel.Text = $"Активна вкладка: {tabName}";
    }
}

Selecting / Deselecting

// Перед вибором вкладки
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) {
    // Можна скасувати перехід
    if (e.TabPage.Text == "Адмін" && !isAdmin) {
        e.Cancel = true;
        MessageBox.Show("Немає доступу!");
    }
}

Інші події

// Перед закриттям вкладки
private void tabControl1_Deselecting(object sender, TabControlCancelEventArgs e) {
    if (hasUnsavedChanges) {
        DialogResult result = MessageBox.Show(
            "Є незбережені зміни. Продовжити?",
            "Підтвердження",
            MessageBoxButtons.YesNo);
        e.Cancel = (result == DialogResult.No);
    }
}

// Подвійний клік по заголовку
private void tabControl1_DoubleClick(object sender, EventArgs e) {
    // Обробка подвійного кліку
    Point clickPoint = tabControl1.PointToClient(Cursor.Position);
    for (int i = 0; i < tabControl1.TabCount; i++) {
        if (tabControl1.GetTabRect(i).Contains(clickPoint)) {
            // Подвійний клік по вкладці з індексом i
            break;
        }
    }
}

Динамічні вкладки

// Створення вкладок у runtime
private void AddDynamicTab(string title) {
    TabPage newTab = new TabPage(title);
    newTab.Name = $"tabPage_{Guid.NewGuid()}";
    
    // Додаємо вміст
    TextBox textBox = new TextBox();
    textBox.Location = new Point(10, 10);
    textBox.Size = new Size(200, 20);
    newTab.Controls.Add(textBox);
    
    // Додаємо кнопку закриття
    Button closeButton = new Button();
    closeButton.Text = "X";
    closeButton.Location = new Point(220, 10);
    closeButton.Click += (s, e) => {
        tabControl1.TabPages.Remove(newTab);
    };
    newTab.Controls.Add(closeButton);
    
    tabControl1.TabPages.Add(newTab);
    tabControl1.SelectedTab = newTab;
}

Стилізація та зовнішній вигляд

// Налаштування зовнішнього вигляду
tabControl1.Alignment = TabAlignment.Top;
tabControl1.Appearance = TabAppearance.Normal;
tabControl1.Multiline = true;
tabControl1.SizeMode = TabSizeMode.Fixed;
tabControl1.ItemSize = new Size(120, 25);

// Кольори
tabControl1.BackColor = Color.LightGray;
tabControl1.ForeColor = Color.DarkBlue;

// Стиль окремих вкладок
tabControl1.TabPages[0].BackColor = Color.Yellow;
tabControl1.TabPages[0].ForeColor = Color.Red;
tabControl1.TabPages[0].ImageIndex = 0; // Іконка
Важливо:Стилізація може відрізнятися залежно від версії .NET та теми операційної системи.

Практичні приклади

Налаштування програми

private void InitializeSettingsTabs() {
    // Основні налаштування
    TabPage generalTab = new TabPage("Основні");
    AddCheckBox(generalTab, "Запуск з Windows", 20, 20);
    AddCheckBox(generalTab, "Показувати сповіщення", 20, 50);
    
    // Налаштування інтерфейсу
    TabPage interfaceTab = new TabPage("Інтерфейс");
    AddComboBox(interfaceTab, "Тема", new string[] { "Світла", "Темна" }, 20, 20);
    AddComboBox(interfaceTab, "Мова", new string[] { "Українська", "Англійська" }, 20, 50);
    
    tabControl1.TabPages.AddRange(new TabPage[] {
        generalTab, interfaceTab
    });
}

Файловий менеджер

private void OpenFileInNewTab(string filePath) {
    string fileName = Path.GetFileName(filePath);
    TabPage fileTab = new TabPage(fileName);
    
    // Додаємо TextBox для вмісту файлу
    TextBox textBox = new TextBox();
    textBox.Multiline = true;
    textBox.Dock = DockStyle.Fill;
    textBox.ScrollBars = ScrollBars.Both;
    textBox.Text = File.ReadAllText(filePath);
    fileTab.Controls.Add(textBox);
    
    tabControl1.TabPages.Add(fileTab);
    tabControl1.SelectedTab = fileTab;
}

Найкращі практики і поради

Продуктивність: При додаванні множини елементів на вкладку використовуйте SuspendLayout() і ResumeLayout().
tabControl1.SuspendLayout();
// Масові операції з вкладками
for (int i = 0; i < 10; i++) {
    TabPage tab = new TabPage($"Вкладка {i}");
    // Додавання множини контролів
    tabControl1.TabPages.Add(tab);
}
tabControl1.ResumeLayout();
Важливо: Завжди перевіряйте існування вкладки перед зверненням до неї за індексом або іменем.
// Безпечне звернення до вкладки
if (tabControl1.TabPages.Count > index && index >= 0) {
    TabPage tab = tabControl1.TabPages[index];
    // Робота з вкладкою
}

// Безпечне видалення
if (tabControl1.TabPages.Contains(tabPageToRemove)) {
    tabControl1.TabPages.Remove(tabPageToRemove);
}
UX порада: Для кращого користувацького досвіду додавайте іконки на вкладки та робіть заголовки зрозумілими та короткими.

Зміст