更改tabControl的选项卡大小

11

我重新绘制了TabControlTab图形,但无法设置它的Width

我想要的是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个回答

30

实际上,您可以设置选项卡的大小,但不能单独设置。

SizeMode = Fixed和适当的TabControl.Itemsize值的组合可以创建任何大小,但始终相同:

输入图像描述

因此,为了单独扩大每个选项卡以使图标适合,确实需要使用Ian的“spacey”方法。


14

不幸的是,TabControlTabPages选项卡标头没有内置属性可以单独控制宽度(编辑:显然,有 TabControl.ItemSize 可以集体控制。请参见 TaW 的答案来修复选项卡控件下所有选项卡页面的宽度)。

但你可以做一个小技巧,在TabPage.Text左侧或右侧添加额外的空格,为图标留出足够的空间。

没有空格:

输入图片说明

添加了7个空格:

输入图片说明

这应该足以放置你的图标。


2
@LorenzoBelfanti "野蛮的" --- 我同意。;) 这个解决方案的好处在于简单,同时不会失去任何内置的选项卡标题绘制和大小调整行为。假设您通过自定义方法重新调整了选项卡标题的大小,则必须正确覆盖选项卡标题的内置Paint - Ian

7

尝试增加"myTabControl.Padding.X"。这对我有效!


可以让“X”部分工作,但是对我来说,这个代码完美地运行了而且没有在末尾添加任何奇怪的空格: this.mytabControl.Padding = new System.Drawing.Point(15, 3); - casewolf

1

使用它...

private void FrmSqlMain_Load(object sender, EventArgs e)
 {
     myTabControl.SizeMode = TabSizeMode.Normal;
     myTabControl.DrawMode = TabDrawMode.OwnerDrawFixed;
 }

1

我还想补充一件事。起初,我尝试添加空格,但似乎对我没有作用。后来,我意识到必须添加比平常更多的空格才能看到区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接