Изменяются кастомные контролы
У меня есть такой кастомный TabControl и он после компиляции изменяется, мне нужна реализация как сохранить изначальный вид такого контрола на форме (в студии VS) чтобы он не изменялся, после запуска работает как в изначальном виде, только в самой студии меняется цвет и форма окантовки пропадает!
Вот его код:
using System.Drawing;
using System.Windows.Forms;
namespace AutoView
{
public class CustomTabControl : TabControl
{
private Color _tabColor = Color.FromArgb(50, 50, 50); // Цвет вкладки
private Color _selectedTabColor = Color.FromArgb(0, 120, 215); // Цвет выбранной вкладки
private Color _textColor = Color.White; // Цвет текста вкладок
private int _borderThickness = 2; // Толщина границы вкладок
private int _tabHeight = 40; // Высота вкладок
// Конструктор класса
public CustomTabControl()
{
// Установить стили для управления рисованием
SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
ItemSize = new Size(120, _tabHeight); // Задать размеры вкладок
SizeMode = TabSizeMode.Fixed; // Установить фиксированный режим размеров
}
// Свойство для высоты вкладок
public int TabHeight
{
get => _tabHeight;
set
{
// Проверка изменения значения
if (_tabHeight != value)
{
_tabHeight = value;
ItemSize = new Size(ItemSize.Width, _tabHeight); // Обновить размер
Invalidate(); // Перерисовать
}
}
}
// Свойство для управления толщиной границы вкладок
public int BorderThickness
{
get => _borderThickness;
set
{
// Проверка изменения значения
if (_borderThickness != value)
{
_borderThickness = value;
Invalidate(); // Перерисовать
}
}
}
// Свойство для цвета вкладки
public Color TabColor
{
get => _tabColor;
set
{
// Проверка изменения значения
if (_tabColor != value)
{
_tabColor = value;
Invalidate(); // Перерисовать
}
}
}
// Свойство для цвета выбранной вкладки
public Color SelectedTabColor
{
get => _selectedTabColor;
set
{
// Проверка изменения значения
if (_selectedTabColor != value)
{
_selectedTabColor = value;
Invalidate(); // Перерисовать
}
}
}
// Свойство для цвета текста вкладки
public Color TextColor
{
get => _textColor;
set
{
// Проверка изменения значения
if (_textColor != value)
{
_textColor = value;
Invalidate(); // Перерисовать
}
}
}
// Метод для отрисовки вкладок
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(Color.FromArgb(30, 30, 30)); // Установить фоновый цвет
for (int i = 0; i < TabCount; i++)
{
// Получить прямоугольник вкладки
Rectangle tabRect = GetTabRect(i);
tabRect.Inflate(-_borderThickness, -_borderThickness); // Уменьшить размер вкладки на толщину границы
// Выбор цвета для вкладки
Color tabColor = (i == SelectedIndex) ? _selectedTabColor : _tabColor;
// Использование using для автоматического освобождения ресурсов
using (SolidBrush brush = new(tabColor))
{
e.Graphics.FillRectangle(brush, tabRect); // Заполнить вкладку цветом
}
// Отрисовать текст вкладки по центру
TextRenderer.DrawText(e.Graphics, TabPages[i].Text, Font, tabRect, _textColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
}
base.OnPaint(e); // Вызов базового метода отрисовки
}
}
}
И вот что получается в итоге: