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

コントロール(GroupBox)のカスタマイズ

環境/言語:[C# 2.0]
分類:[.NET]

いつも教授ありがとうございます。

今回は、タイトル通りカスタムコントロールを作ろうとしております。
通常のGroupBoxだとWindowsテーマによって色や形などが決まると思うのですが
それが嫌で今、線の色を変えるところまでは出来ました。
問題はここからです。
通常のGroupBoxだとプロパティに「Text」がありそこへ文字列を入力することで
GroupBoxのタイトルを入れることが出来るのに対し、新たに作ったクラスではこれが実現出来ないのです。(知識が無いため)
プロパティも削ってないのでそのまま入力すればと安易な考えで作ったのですが
だめでした。

どなたかプロパティの設定方法やGroupBoxへのタイトル挿入などご存知の方がお見えでしたらご教授下さい。

お願いします。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Rectangle rectPaint = this.ClientRectangle;
if ((rectPaint.Width <= 0) || (rectPaint.Height <= 0))
{
return;
}

rectPaint.Inflate(-1, -1);
LinearGradientBrush brushBackground = new LinearGradientBrush(rectPaint, this.BackColor, Color.Transparent, LinearGradientMode.ForwardDiagonal);
g.FillRectangle(brushBackground, rectPaint);
brushBackground.Dispose();

rectPaint.Width -= 1;
rectPaint.Height -= 1;

rectPaint.Inflate(1, 1);
g.DrawRectangle(new Pen(Color.Blue, 1), rectPaint);
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

当然のことながら以下のようにすればBox内に文字は描画できますが・・・
SolidBrush brushText = new SolidBrush(ForeColor);
g.TextRenderingHint = TextRenderingHint.SystemDefault;
g.DrawString(this.Text, this.Font, brushText, 10,10);
brushText.Dispose();
描画する枠の上辺を少し下に下げてやれば良いんでは?
で、そのあと Text を描画する範囲の四角形を一旦背景色で塗りつぶしてその上に Text を描画すると。
Text の描画範囲は Graphics の MeasureString メソッドなどではかれます。
あと、改行が含まれている場合にどうするかも考慮する必要があるでしょう。
■No15770に返信(Hongliangさんの記事)
> 描画する枠の上辺を少し下に下げてやれば良いんでは?
> で、そのあと Text を描画する範囲の四角形を一旦背景色で塗りつぶしてその上に Text を描画すると。
> Text の描画範囲は Graphics の MeasureString メソッドなどではかれます。
> あと、改行が含まれている場合にどうするかも考慮する必要があるでしょう。

お世話になります。
早速の、ご回答ありがとうございます。
確かに、言われてみればその通りですね。VS.NETを最近さわりはじめ、思うようなコントロールが無く作ろうと思い始めてみたは良いんですが、プロパティがあるなら何故簡単に使えないの?と言う考えになってしまい恥ずかしながら思いつきませんでした。

結果、旨く出来ました。
ありがとうございました。今後も宜しくお願いします。
解決済み!

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