Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the Tab size of tabControl

I redraw the graphics of the Tab for the TabControl but I can't set the Width of it.

What I want is that the text of the Tab and the icon is contained in its size.

Now is something like this:

tabs are overlaid

My Code

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 {}
}

Thanks

like image 299
Lorenzo Belfanti Avatar asked Feb 02 '16 13:02

Lorenzo Belfanti


4 Answers

Actually you can set the size of the tabs, but not individually.

The combination of SizeMode = Fixed and some suitable value for the TabControl.Itemsize will create any size, but always the same..:

enter image description here

So for individually enlarging each tab to make the icon fit you indeed need to use Ian's 'spacey' method..

like image 165
TaW Avatar answered Nov 09 '22 02:11

TaW


Try increasing "myTabControl.Padding.X". It works for me!

like image 33
Nader Avatar answered Nov 09 '22 00:11

Nader


Unfortunately, there isn't built-in property to control the width of the TabPages' tab header of the TabControl individually (Edit: apparently, there is TabControl.ItemSize to control it collectively. See TaW's answer to fix the width of all tab pages under a tab control).

But a little trick you could do is to give additional spaces in the left or in the right of the TabPage.Text to give you enough space for your icon.

Without space:

enter image description here

With 7 spaces:

enter image description here

It should be enough to put your icon

like image 12
Ian Avatar answered Nov 09 '22 00:11

Ian


Use it...

private void FrmSqlMain_Load(object sender, EventArgs e)
 {
     myTabControl.SizeMode = TabSizeMode.Normal;
     myTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
 }
like image 1
binhnguyenpth Avatar answered Nov 09 '22 01:11

binhnguyenpth