プロが教えるわが家の防犯対策術!

いつもお世話になっております。

Labelコントロールの背景をグラデーションにしたいと思い、Paintメソッドにてオーナードローしようかと考えております。
対象となるLabelのサイズは45*45です。
そこで、白→青→白といった風に、2段階のグラデーションをかけたいのですが、方法がわかりません…。
オーナードロー自体勉強し始めたばかりで、とりあえずどうなるのか確認のため、下記のように書いてみました。

※Label_Paintメソッド内を抜粋
Dim gb As New LinearGradientBrush( _
   New Rectangle(0, 0, CInt(g.VisibleClipBounds.Width), CInt(g.VisibleClipBounds.Height / 2)), _
   Color.White, _
   Color.Blue, _
   LinearGradientMode.Vertical)

自分の思惑では、とりあえず半分までグラデーションが描画されると考えたのですが、白→青のグラデーションが2重に描画されてしまいました。(白→青→白→青)

ちなみに、描画したいLabelは大量(50個程度)ある為、画像を表示させる…等は用いたくありません。

考え方が根本的に間違っているのかもしれませんが…
どうかご教授願います。

A 回答 (1件)

LinearGradientBrushを2個用意しましょう



dim gb1, gb2 as LinearGradientBrush
dim rc1, rc2 as Rectangle
dim lb as label = CType( sender, Label)
rc1 = lb.ClientRectangle
rc2 = rc1
rc1.Height /= 2
rc2.y /= 2
rc2.Height /= 2

gb1 = new LinearGradientBrush( rc1, Color.White, Color.Blue, LinearGradientMode.Vertical)
gb2 = new LinearGradientBrush( rc2, Color.Blue, Color.White, LinearGradientMode.Vertical)
e.Graphics.FillRectangle( gb1, rc1 )
e.Graphics.FillRectangle( gb2, rc2 )
といった具合です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!