TabControlコントロールのAlignmentプロパティをRightやLeftにしてタブを横側に表示すると、タブに表示されるテキストは横向きで縦に表示されます。ここでは、以下の画像のように、タブが横にあるときでもテキストを横書きで表示する方法を紹介します。
TabControlのタブのテキストを常に横書きで表示するには、「TabControlのタブを自分で描画する」で紹介している方法で、タブを自分で描画します。
以下に、オーナードローによりTabControl1のタブのテキストを常に横書きする例を示します。
'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) _ Handles MyBase.Load 'タブを左側に表示する TabControl1.Alignment = TabAlignment.Left 'タブのサイズを固定する TabControl1.SizeMode = TabSizeMode.Fixed TabControl1.ItemSize = New Size(25, 80) 'TabControlをオーナードローする TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed End Sub 'TabControl1のDrawItemイベントハンドラ Private Sub TabControl1_DrawItem(ByVal sender As Object, _ ByVal e As DrawItemEventArgs) _ Handles TabControl1.DrawItem '対象のTabControlを取得 Dim tab As TabControl = DirectCast(sender, TabControl) Dim page As TabPage = tab.TabPages(e.Index) 'タブページのテキストを取得 Dim txt As String = page.Text 'StringFormatを作成 Dim sf As New StringFormat() '水平垂直方向の中央に、行が完全に表示されるようにする sf.LineAlignment = StringAlignment.Center sf.Alignment = StringAlignment.Center sf.FormatFlags = sf.FormatFlags Or StringFormatFlags.LineLimit '背景の描画 Dim backBrush As Brush = New SolidBrush(page.BackColor) e.Graphics.FillRectangle(backBrush, e.Bounds) backBrush.Dispose() 'Textの描画 Dim foreBrush As Brush = New SolidBrush(page.ForeColor) e.Graphics.DrawString(txt, page.Font, foreBrush, RectangleF.op_Implicit(e.Bounds), sf) foreBrush.Dispose() End Sub
//フォームのLoadイベントハンドラ private void Form1_Load(object sender, System.EventArgs e) { //タブを左側に表示する TabControl1.Alignment = TabAlignment.Left; //タブのサイズを固定する TabControl1.SizeMode = TabSizeMode.Fixed; TabControl1.ItemSize = new Size(25, 80); //TabControlをオーナードローする TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed; //DrawItemイベントハンドラを追加 TabControl1.DrawItem += new DrawItemEventHandler(TabControl1_DrawItem); } //TabControl1のDrawItemイベントハンドラ private void TabControl1_DrawItem(object sender, DrawItemEventArgs e) { //対象のTabControlを取得 TabControl tab = (TabControl)sender; TabPage page = tab.TabPages[e.Index]; //タブページのテキストを取得 string txt = page.Text; //StringFormatを作成 StringFormat sf = new StringFormat(); //水平垂直方向の中央に、行が完全に表示されるようにする sf.LineAlignment = StringAlignment.Center; sf.Alignment = StringAlignment.Center; sf.FormatFlags |= StringFormatFlags.LineLimit; //背景の描画 Brush backBrush = new SolidBrush(page.BackColor); e.Graphics.FillRectangle(backBrush, e.Bounds); backBrush.Dispose(); //Textの描画 Brush foreBrush = new SolidBrush(page.ForeColor); e.Graphics.DrawString(txt, page.Font, foreBrush, e.Bounds, sf); foreBrush.Dispose(); }