- PR -

C#でのTabコントロール背景設定の方法

1
投稿者投稿内容
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2005-10-12 14:09
いつもお世話になっております。

現在C#アプリケーションを作成しているのですが、
Form上にTabを使用するような画面レイアウトを取ろうとしています。

またFormのデザインとして、背景にグラデーションを設定したいと思っています。
かっこよくするためには、Formに配置する各コントロールにも色を設定する必要が
出てきました。

ボタンなどは問題なくできるのですが、Tabコントロールの場合、
Tabページには背景を設定できましたが、『TABページを切り替えるボタン部分』
や『切替ボタンの右側部分』が灰色のままになってしまっています。

この部分の色を変更する方法はないのでしょうか?
ご存知の方いらっしゃいましたら、よろしくお願いします。

また操作性が問題なければ代替の案などでも結構です。
ご意見をお願いします。

以上、お忙しいとは思いますが、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-10-12 14:19
こんにちは、じゃんぬ です。

引用:

Makotoさんの書き込み (2005-10-12 14:09) より:

ボタンなどは問題なくできるのですが、Tabコントロールの場合、
Tabページには背景を設定できましたが、『TABページを切り替えるボタン部分』
や『切替ボタンの右側部分』が灰色のままになってしまっています。
この部分の色を変更する方法はないのでしょうか?


オーナードローの出番ですかね。

 this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;

で、DrawItem イベントの DrawItemEventArgs を使って Draw という感じかな...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2005-10-12 15:17

じゃんぬねっとさん、早速の回答ありがとうございます。

ご指摘の手順を実施してみました。
おかげさまでうまくいきました。

ただ、『切替ボタンの右側部分』や『TabとTabページの間隔部分』
が灰色のまま残ってしまっています。
そのあたりも本イベント内で対応できるのでしょうか?

ご参考までに、Webページを参考に書いたコードを下記に記載します。
(Draw系の関数周りは、今まで扱ったことのないクラス群やら
 イベント群が多数のためよくわかっていません...
 私の単純な理解不足が一番問題と思います...)

private void Form1_Load(object sender, System.EventArgs e)
{
this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
}

private void tabControl1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{

//対象のTabControlを取得
TabControl tab = (TabControl) sender;
//タブページのテキストを取得
string txt = tab.TabPages[e.Index].Text;

//タブのテキストと背景を描画するためのブラシを決定する
Brush foreBrush, backBrush;
if (e.State == DrawItemState.Selected)
{
//選択されているタブのテキストを赤、背景を青とする
foreBrush = Brushes.White;
backBrush = Brushes.Blue;
}
else
{
//選択されていないタブのテキストは灰色、背景を白とする
foreBrush = Brushes.Black;
backBrush = Brushes.Gray;
}

//StringFormatを作成
StringFormat sf = new StringFormat();
//中央に表示する
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;

//背景の描画
e.Graphics.FillRectangle(backBrush, e.Bounds);
//Textの描画
e.Graphics.DrawString(txt, e.Font, foreBrush, e.Bounds, sf);
}

以上、お忙しいとは思いますが、よろしくお願いいたします。
1

スキルアップ/キャリアアップ(JOB@IT)