2015-06-13 4 views
1

У меня есть элемент управления вкладкой, который я хочу настроить. Чтобы быть более конкретным, я хочу изменить цвет заголовка вкладки, а также цвет этой белой строки вокруг закладки (проверьте первое изображение).Recoloring TabControl

Я думал об использовании собственного средства визуализации для этого (аналогично перекрашиванию полосы меню, например), но я не уверен, как это сделать. Я также прочитал, что настройка DrawMode на OwnerDrawFixed может сделать это, но с помощью этой опции элемент управления вкладки выглядит так, как если бы моя программа была сделана в 90-х (проверьте второе изображение).

Что я действительно хочу сделать, так это сохранить вкладки простыми и плоскими и изменить цвет. Проверьте, как вкладки находятся в Visual Studio в качестве примера (проверьте третье изображение).

enter image description here

Любые идеи?

Редактировать: Другое изображение закладки, чтобы было более ясно, что это за «белая линия».

enter image description here

+0

так, умирает ответ на помощь? – Plutonix

ответ

1

При использовании OwnerDrawFixed это означает вы будет поставлять код рисования. Если вы не подключили и не использовали событие DrawItem, ничего не нарисовано. Это будет выглядеть так же, как ваш во время разработки, потому что это событие не срабатывает. Для рисования времени разработки вам необходимо подклассифицировать элемент управления и использовать OnDrawItem.

// colors to use 
    private Color[] TColors = {Color.Salmon, Color.White, Color.LightBlue}; 

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     // get ref to this page 
     TabPage tp = ((TabControl)sender).TabPages[e.Index]; 

     using (Brush br = new SolidBrush(TColors[e.Index])) 
     { 
      Rectangle rect = e.Bounds; 
      e.Graphics.FillRectangle(br, e.Bounds); 

      rect.Offset(1, 1); 
      TextRenderer.DrawText(e.Graphics, tp.Text, 
        tp.Font, rect, tp.ForeColor); 

      // draw the border 
      rect = e.Bounds; 
      rect.Offset(0, 1); 
      rect.Inflate(0, -1); 

      // ControlDark looks right for the border 
      using (Pen p = new Pen(SystemColors.ControlDark)) 
      { 
       e.Graphics.DrawRectangle(p, rect); 
      } 

      if (e.State == DrawItemState.Selected) e.DrawFocusRectangle(); 
     } 
    } 

Основной результат:

enter image description here

Вкладка палец выглядит немного стесненных мне и не столь высокий, как по умолчанию. Итак, я добавил TFontSize, чтобы нарисовать текст в другом размере, чем шрифт.

Установите TabControl.Font на 10 (что кажется большим), так что Windows рисует немного больший палец/заголовок. Если вы все-таки нарисовать текст на умолчанию 8,25, есть больше места:

private float TFontSize = 8.25F;  // font drawing size 
    ... 
    using (Font f = new Font(tp.Font.FontFamily,TFontSize)) 
    { 
     // shift for a gutter/padding 
     rect.Offset(1, 1);     
     TextRenderer.DrawText(e.Graphics, tp.Text, 
        f, rect, tp.ForeColor); 
    } 

enter image description here

Одна вещь, вы потеряете этот путь является эффект VisualStyles, но они, казалось бы, столкновение с цветными вкладками в любом случае ,

+0

О, извините, что не отвечаю. Ну, я дал вам преимущество для усилий, он изменил цвет заголовка, но цвет вокруг элемента управления (посмотрите на первое изображение слева (эта белая линия)) остается тем же, и у меня нет выяснили, как это изменить. –

+0

Я не уверен, какая белая линия, на которой вы ссылаетесь. – Plutonix

+0

Я добавил новую картинку. Это белая линия, которая идет вокруг закладки. Видно, установлен ли 'DrawMode' в' Normal' или 'OwnerDrawFixed'. –