DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ToolStripLabelのBackColor

環境/言語:[C# .Net Framework2.0]
分類:[.NET]

VS2005でToolStripにToolStripLabelを配置しました。
背景色を設定しようとしてBackColorを指定したのです
が、色が既定?のツールバー背景色から変わりません。

BackColorを希望の色に変更するのに何か前提条件が必
要なのでしょうか。
  • 題名: Re[1]: ToolStripLabelのBackColor
  • 著者: YAS
  • 日時: 2007/07/29 14:37:20
  • ID: 20165
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
ToolStripのRenderModeをSyetemにすればよいと思います。
ToolStrip自体の色も変わってしまいますが...
YASさん ありがとうございます。

> ToolStripのRenderModeをSyetemにすればよいと思います。
> ToolStrip自体の色も変わってしまいますが...

ToolStripのRenderModeをSystemにしたら、その中のラベルの背景色を変えら
れるようになりました。そして、ToolStrip自体の色も変わりました。

デフォールトのToolStripの背景はそれなりに気に入っていたのですが、それ
を生かして、中のラベルの背景色だけを換えることはできないか、非常に大
変ということですか…

現実を受け入れることにしますが、あと数時間だけ、「解決」マークをつけず
におきます。あしからず。
■No20164に返信(とんびさんの記事)
> VS2005でToolStripにToolStripLabelを配置しました。
> 背景色を設定しようとしてBackColorを指定したのです
> が、色が既定?のツールバー背景色から変わりません。
> 
> BackColorを希望の色に変更するのに何か前提条件が必
> 要なのでしょうか。

ToolStripの項目はControlではなく、
普通のControlのように描画しているわけではありません。

ToolStripはToolStripRendererが描画していますので、
これを作らなければなりません。

背景を描画したいのであれば、
ToolStripRendererを継承した独自レンダリングクラスを作成し、
OnRenderLabelBackgroundメンバに背景を描画するコードを書きます。

独自のレンダリングをしたいツールバーのRendererプロパティに、
作成した独自レンダリングクラスを設定すれば、背景を描画できます。

独自レンダリングクラスは以下のようなので大丈夫です。
Public Class MyToolStripRenderer
    Inherits ToolStripRenderer

    Protected Overrides Sub OnRenderLabelBackground(ByVal e As System.Windows.Forms.ToolStripItemRenderEventArgs)
        Using b As New SolidBrush(e.Item.BackColor)
            e.Graphics.FillRectangle(b, e.Item.ContentRectangle)
        End Using
    End Sub

End Class
れいさん、ありがとうございます。

C#で以下のように書いてやってみました。これで一応動作しましたが
下記のように、結果は期待通りではありません。

public class MyToolStripRenderer
: ToolStripRenderer
{
protected override void OnRenderLabelBackground(
ToolStripItemRenderEventArgs e)
{
using (SolidBrush b = new SolidBrush(e.Item.BackColor))
{
e.Graphics.FillRectangle(b, e.Item.ContentRectangle);
}
}
}

FormのLoadイベント内で
ToolStrip1.Renderer = new MyToolStripRenderer();

●得られた結果:ラベルの背景色は期待通りになったが、ラベルを含むツー
ルバーの外観も変わってしまいました。ToolStrip1.RenderMode = Systemに
したのとほぼ同じ結果です。できたらToolStripの外観は設計時の外観を維持
したいのですが…
■No20168に返信(とんびさんの記事)
> れいさん、ありがとうございます。
> ●得られた結果:ラベルの背景色は期待通りになったが、ラベルを含むツー
> ルバーの外観も変わってしまいました。ToolStrip1.RenderMode = Systemに
> したのとほぼ同じ結果です。できたらToolStripの外観は設計時の外観を維持
> したいのですが…

自分の好みで
ToolStripProfessionalRendererやToolStripSystemRendererから派生すれば
そのRendererの振舞を変更できるとおもいます。
2007/07/30(Mon) 13:04:51 編集(投稿者)

> 自分の好みで
> ToolStripProfessionalRendererやToolStripSystemRendererから派生すれば
> そのRendererの振舞を変更できるとおもいます。

Professionalにはとても及ばないので、あきらめることにします。
せっかくのご教示を生かせず、申し訳ありません。

VS2003にくらべて、VS2005のメニューやツールバーがとても複雑で、
難しくなっているのに戸惑っています。力のある人には便利になって
いるのだろうとは思うのですが、それについていくのは大変なことです。

YASさん、れいさん、お世話になりました。
この件は、一応解決といたします。
解決済み!
■No20172に返信(とんびさんの記事)
>>ToolStripProfessionalRendererやToolStripSystemRendererから派生すれば
>>そのRendererの振舞を変更できるとおもいます。
>
> Professionalにはとても及ばないので、あきらめることにします。

あれれ?
言いたいことが伝わっていませんね。
継承元を変えるだけでうまくいくのですよ。

>public class MyToolStripRenderer : ToolStripRenderer

これを

>public class MyToolStripRenderer : ToolStripProfessionalRenderer

こうすればいいだけです。
■No20173に返信(れいさんの記事)
> 継承元を変えるだけでうまくいくのですよ。
> >public class MyToolStripRenderer : ToolStripRenderer
> これを
> >public class MyToolStripRenderer : ToolStripProfessionalRenderer
> こうすればいいだけです。

れいさん、とんちんかんにお付き合いいただき、ありがとうございました。
期待通りの結果を得ることができました。

これで完全解決です。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板