- 日時: 2009/12/26 16:48
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[その他コントロール][描画・画像][] * * キーワード:TabControl,オーナードロー,タブの表示位置,タブのテキスト * *********************************************************************************** タイトル : タブを左にすると文字が表示されない 記 事 No : 4616 投 稿 日 : 2006/12/03(Sun) 16:32 元質問者 : tomo
タブを左側(もしくは右)にするとタブのtextが出てこなくなってしまいます
又、タブを下側にするとXPの場合、丸みがある部分が上側にきてしまうため見た目が変に なってしまいます
-------------------------------------------------------------------------------- ちょっと便利な検索ソフト(http://hanatyan.sakura.ne.jp/yybbs/read.cgi?no=117) を使って、キーワード【TabControl TabDrawMode.OwnerDrawFixed】での検索結果 (当サイト内・外の検索でも同じ) ----- by 花ちゃん ----- ヒット件数 検索対象サイト名 検索結果のURL(短く変換しています) 890 件 ■ウェブ全体から検索 http://tinyurl.com/6zcczy 96 件 ●msdn.microsoft.com/ http://tinyurl.com/6y4dcv 3 件 DOBON.NET http://tinyurl.com/6s6wj8 2 件 ★VBレスキュー(花ちゃん) http://tinyurl.com/5aqreh 1 件 Programing Library http://tinyurl.com/6jc6pv 1 件 わんくま同盟 http://tinyurl.com/5gerqb --------------------------------------------------------------------------------
----------------------------------------------------------------------------------- 記事No : 4617・4618 投稿日 : 2006/12/04(Mon) 05:38 回答者 : 魔界の仮面弁士 ----------------------------------------------------------------------------------- Windows XP の ビジュアルスタイルを有効にしていませんか?
クラシックモード(Classic)の場合は、横方向のタブが存在しますが、 Lunaモード(Whistler)の場合、上方向のタブしか存在しないため、 TabAlignment.Left などを指定すると、表示が崩れてしまいます。
ゆえに選択肢は、Windows のテーマを、横方向タブを持ったスタイルにして運用するか、 タブ機能を自力実装するか(ただし、TabRenderer クラスは使えませんが)、 オーナードローで誤魔化すか、そもそも、横方向タブを使うのを諦めるか……など。
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 を用いて縦書きすると良いかも。
上記実行結果(画像をクリックすると元のサイズで見られます) オーナードローをしない場合 上記コードの実行結果
|