2016-02-02 5 views
3

Я перерисовываю графику Tab для TabControl, но я не могу установить Width.Изменение размера вкладки tabControl

Что я хочу, так это то, что текст Tab и значок содержатся в его размере.

Теперь что-то вроде этого:

tabs are overlaid

Мой код

private void tabControlForm_DrawItem(object sender, DrawItemEventArgs e) 
{ 

    try 
    { 
     using (Brush br = new SolidBrush(TabColors[tabControlForm.TabPages[e.Index]])) 
     { 
      Rectangle rect = e.Bounds; 

      rect.Width += 10; 

      e.Graphics.FillRectangle(br, rect); 
      SizeF sz = e.Graphics.MeasureString(tabControlForm.TabPages[e.Index].Text, e.Font); 
      e.Graphics.DrawString(tabControlForm.TabPages[e.Index].Text, e.Font, Brushes.Black, rect.Left + (rect.Width - sz.Width)/2, rect.Top + (rect.Height - sz.Height)/2 + 1); 

      using (var src = new Bitmap(System.Reflection.Assembly.GetEntryAssembly().GetManifestResourceStream("Castor.Gestionale.images.close-button.png"))) 
      { 
       e.Graphics.DrawImage(src, rect.Right - 18, rect.Top + 10); 
      } 

      e.Graphics.DrawRectangle(Pens.DarkGray, rect); 
      e.DrawFocusRectangle(); 
     } 
    } 
    catch {} 
} 

Благодаря

ответ

5

К сожалению, не встроенный в собственности контролировать ширину TabPages' заголовок вкладки TabControl.

Но небольшая уловка, которую вы могли бы сделать, это дать дополнительные spaces в левой или правой части TabPage.Text, чтобы предоставить вам достаточно места для вашего значка.

Без пространства:

enter image description here

С 7 пространств:

enter image description here

Это должно быть достаточно, чтобы поставить значок

+2

Решение действительно варварское, но если это единственный способ ... –

+0

@LorenzoBelfanti «Barbaric» --- Согласен. ;) Это решение имеет преимущество простоты, не теряя при этом никаких встроенных покрасок и размеров. Предположим, что вы изменили размер заголовка вкладки по специальному методу, встроенный 'Paint' для заголовка вкладки должен быть полностью переопределен – Ian

8

На самом деле вы можете установить размер вкладок , но не индивидуально.

Сочетание SizeMode = Fixed и некоторые подходящие значения для TabControl.Itemsize будет создавать любой размер, но всегда же ..:

enter image description here

Таким образом, для увеличения индивидуально каждую вкладку, чтобы сделать значок подходят вам действительно нужно использовать метод «космического» Яна.

+1

Здесь используется метод« Spacey »и метод« Barbaric »...;) не так уж плохо , – Ian

Смежные вопросы