tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルタブを左にすると文字が表示されない
記事No4616
投稿日: 2006/12/03(Sun) 16:32
投稿者tomo
こんにちは

VB2005に挑戦しているものです

Tabcontrolの使い方で質問があります
タブを左側(もしくは右)にすると
タブのtextが出てこなくなってしまいます

簡単な事かもしれませんがご教授願いますでしょうか

VisualBasic2005 Expressです
よろしくお願いします

[ツリー表示へ]
タイトルRe: タブを左にすると文字が表示されない
記事No4617
投稿日: 2006/12/03(Sun) 23:33
投稿者魔界の仮面弁士
Windows XP の ビジュアルスタイルを有効にしていませんか?

クラシックモード(Classic)の場合は、横方向のタブが存在しますが、
Lunaモード(Whistler)の場合、上方向のタブしか存在しないため、
TabAlignment.Left などを指定すると、表示が崩れてしまいます。


ゆえに選択肢は、Windows のテーマを、横方向タブを持ったスタイルにして運用するか、
タブ機能を自力実装するか(ただし、TabRenderer クラスは使えませんが)、
オーナードローで誤魔化すか、そもそも、横方向タブを使うのを諦めるか……など。

[ツリー表示へ]
タイトルRe^2: タブを左にすると文字が表示されない
記事No4618
投稿日: 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 を用いて縦書きすると良いかも。

[ツリー表示へ]
タイトルRe: タブを左にすると文字が表示されない
記事No4627
投稿日: 2006/12/04(Mon) 16:20
投稿者tomo
魔界の仮面弁士さん

ありがとうございます
早速やってみたいと思います

[ツリー表示へ]