DOBON.NETプログラミング掲示板過去ログ
コントロール(GroupBox)のカスタマイズ
題名: コントロール(GroupBox)のカスタマイズ
著者: 青いお鼻
日時: 2006/05/16 13:26:37
ID: 15769
この記事の返信元:
(なし)
この記事への返信:
[15770]
Re[1]: コントロール(GroupBox)のカスタマイズ
Hongliang
2006/05/16 14:05:23
ツリーを表示
環境/言語:[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();
題名: Re[1]: コントロール(GroupBox)のカスタマイズ
著者: Hongliang
URL:
http://hongliang.seesaa.net/
日時: 2006/05/16 14:05:23
ID: 15770
この記事の返信元:
[15769]
コントロール(GroupBox)のカスタマイズ
青いお鼻
2006/05/16 13:26:37
この記事への返信:
[15787]
Re[2]: コントロール(GroupBox)のカスタマイズ
青いお鼻
2006/05/16 18:22:38
[解決]
ツリーを表示
描画する枠の上辺を少し下に下げてやれば良いんでは?
で、そのあと Text を描画する範囲の四角形を一旦背景色で塗りつぶしてその上に Text を描画すると。
Text の描画範囲は Graphics の MeasureString メソッドなどではかれます。
あと、改行が含まれている場合にどうするかも考慮する必要があるでしょう。
題名: Re[2]: コントロール(GroupBox)のカスタマイズ
著者: 青いお鼻
日時: 2006/05/16 18:22:38
ID: 15787
この記事の返信元:
[15770]
Re[1]: コントロール(GroupBox)のカスタマイズ
Hongliang
2006/05/16 14:05:23
この記事への返信:
(なし)
ツリーを表示
■No15770に返信(Hongliangさんの記事)
> 描画する枠の上辺を少し下に下げてやれば良いんでは?
> で、そのあと Text を描画する範囲の四角形を一旦背景色で塗りつぶしてその上に Text を描画すると。
> Text の描画範囲は Graphics の MeasureString メソッドなどではかれます。
> あと、改行が含まれている場合にどうするかも考慮する必要があるでしょう。
お世話になります。
早速の、ご回答ありがとうございます。
確かに、言われてみればその通りですね。VS.NETを最近さわりはじめ、思うようなコントロールが無く作ろうと思い始めてみたは良いんですが、プロパティがあるなら何故簡単に使えないの?と言う考えになってしまい恥ずかしながら思いつきませんでした。
結果、旨く出来ました。
ありがとうございました。今後も宜しくお願いします。
解決済み!
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.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();