2016-08-14 116 views
0

我不喜歡TabControl,它們看起來很醜。所以我創建了我自己定製的TabControl。標題高度有一些問題。我的控制樣子如下:在TabControl中增加頁眉的寬度和高度

enter image description here

控制構造:

this.SetStyle(ControlStyles.UserPaint, true); 
this.SetStyle(Conbut trolStyles.OptimizedDoubleBuffer, true); 
SetStyle(ControlStyles.AllPaintingInWmPaint, true); 
this.DrawMode = TabDrawMode.OwnerDrawFixed; 

而且OnPaintBackground

var g = pevent.Graphics; 
var Count = this.TabCount - 1; 
int Offset = 2; 
int index = 0; 
foreach (TabPage itemtab in this.TabPages) 
{ 
    //SizeF sz = g.MeasureString(itemtab.Text, this.Font); 
    var tabrect = this.GetTabRect(index); 
    var headerrect = new Rectangle(tabrect.Left + Offset, tabrect.Y, tabrect.Width, tabrect.Height); 
    DrawRoundedRectangle(g, Headerbrush, headerrect, 3); 
    g.DrawString(itemtab.Text, this.Font, textbrush, headerrect, str); 
    if (index < Count) index++; 
} 

我想加入這一行:

this.ItemSize = new Size(100, 30); 

但在更改字體大小或標題文本時,寬度返回錯誤的值。

enter image description here

有增長方式的寬度和頭部的高度?

+0

ItemSize.Width對頭部大小沒有任何影響,除非將'SizeMode'設置爲'Fixed'。 –

回答

2

有較大的標籤,你可以使用這些選項:

  1. 控制自動爲文叔提供足夠的空間使用TabControlFont繪製。您可以使用Padding屬性簡單地添加額外的房間。 Padding屬性指定控件的選項卡頁上每個項目周圍的空間量。

  2. 您可以將ItemSize設置爲較大尺寸並將SizeMode設置爲Fixed

ItemSize.Width不會對頭部寬度任何影響,除非你設置SizeModeFixed。這是您在控制中看到意想不到的寬度的原因。

+0

SizeMode.Fixed我不能改變width.But你是對的.izeMode.Fixed是更好的。它救了我。謝謝你!接受作爲anser @ Reza Aghaei – Jandy

+0

我更喜歡Normal'SizeMode'並使用填充。同樣使用'TextRenderer.DrawText'來繪製文本。 –

2

使用Graphics.MeasureString方法來獲取當前使用的字體的大小(寬度&高度),以便校正自定義繪製標籤組件的寬度&高度。

+0

如果您使用'Normal'作爲'TabControl'的'SizeMode',則將自動計算所需的大小,並且不需要測量文本。如果你想在標題上的文字周圍提供更多的空間,那麼使用合適的'Padding'作爲'TabControl'就足夠了。 –

1

看來你需要StringFormatFlagsNoWrap標誌來禁止多行標題。該標誌對於DrawStringMeasureString是必要的。

+0

我在構造函數,NoWrap和:SizeF sz1 = g.MeasureString(this.TabPages [index] .Text,this.Font)中添加了this.ItemsSize;在抽取文本之前,在更改字體大小時文本不居中。那麼這是在哪裏.ItemSize [email protected] – Jandy

+0

對於'MeasureString'使用具有標誌('NoWrap')的構造函數。還有用於居中等的標誌 - 請參閱'StringFormatFlags'類。 – i486