tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: タブを左にすると文字が表示されない
投稿日: 2006/12/04(Mon) 05:38
投稿者魔界の仮面弁士
とりあえず、プロジェクトのプロパティで、
  "Windows アプリケーション フレームワーク プロパティ" - [XP Visual スタイルを有効にする]
のチェックを外せば、横方向タブも使用できます。


XP Visual スタイルを有効設定のままにしておきたいのであれば、オーナードローという手も
ありますが、Lunaモードが「上タブ」しか対応していない以上、見た目上はどうしても
Classicスタイルになってしまうかと思います。

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    TabControl1.Alignment = TabAlignment.Left

    'オーナードローモードを使用
    TabControl1.DrawMode = TabDrawMode.OwnerDrawFixed
    'ページ部分のVisualStyleを無効化
    For Each page As TabPage In TabControl1.TabPages
        page.UseVisualStyleBackColor = False
    Next
End Sub

'タブ部分のオーナードロー処理。
Private Sub TabControl1_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles TabControl1.DrawItem
    Dim tab As TabControl = DirectCast(sender, TabControl)
    Dim page As TabPage = tab.TabPages(e.Index)
    Dim g As Graphics = e.Graphics

    '背景塗りつぶし
    Using backBrush As New SolidBrush(page.BackColor)
        g.FillRectangle(backBrush, e.Bounds)
    End Using

    '文字を回転させて描画
    Using foreBrush As New SolidBrush(page.ForeColor), _
          sf As New StringFormat(StringFormat.GenericDefault)
        sf.Alignment = StringAlignment.Center
        sf.LineAlignment = StringAlignment.Center
        g.TranslateTransform(e.Bounds.X + e.Bounds.Width \ 2, e.Bounds.Y + e.Bounds.Height \ 2)
        Select Case tab.Alignment
            Case TabAlignment.Left
                g.RotateTransform(-90.0F)
            Case TabAlignment.Right
                g.RotateTransform(90.0F)
            Case Else
                'Top/Bottomは無回転
        End Select
        g.DrawString(page.Text, e.Font, foreBrush, 0, 0, sf)
    End Using
End Sub


なお、左右のタブで文字を±90°回転させたくない場合には、Graphics.RotateTransform を
使うのではなく、StringFormatFlags.DirectionVertical を用いて縦書きすると良いかも。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。