- PR -

ラベルの枠に点線

投稿者投稿内容
victor
常連さん
会議室デビュー日: 2002/10/29
投稿数: 46
お住まい・勤務地: アスンシオン - パラグアイ
投稿日時: 2006-05-04 23:37
Windows Form のアプリでラベルに点線の枠をつけたいのですが、どうすれば出来ますか?、BorderStyleのプロパティにはNone,FixedSingle,Fixed3Dしかないのですが・・・
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-05 00:40
引用:

victorさんの書き込み (2006-05-04 23:37) より:

Windows Form のアプリでラベルに点線の枠をつけたいのですが、どうすれば出来ますか?、BorderStyleのプロパティにはNone,FixedSingle,Fixed3Dしかないのですが・・・


自分で描画することになります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-05 03:34
ピクチャーボックスとラベルを使ったユーザーコントロールを自作すると、ちょっと
楽しそうですね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-05 09:37
引用:

R・田中一郎さんの書き込み (2006-05-05 03:34) より:

ピクチャーボックスとラベルを使ったユーザーコントロールを自作すると、ちょっと楽しそうですね。


やるのであれば、System.Windows.Forms.Label を継承した「カスタム コントロール」ですね。
OnPaint メソッドをオーバーライドして、Pen を作り DrawRectangle します。

コントロール ライブラリとして作るのであれば、BorderColor プロパティ、
BorderWidth プロパティ、BorderStyle プロパティを設け、それぞれ動的に描画できるようにします。

この時、描画する Rectangle は BorderWidth 分を考慮する必要があります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-05 13:41
似たようなのがVSUGに
http://vsug.jp/tabid/63/forumid/72/postid/3843/view/topic/Default.aspx
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-05 14:05
こういう類の事に継承を使うのは個人的にはあまり好かないですね。
Label.BorderStyle にも矛盾が生じるのではないでしょうか。

私がやるとしたら、使用側で描画してやるか、数が多くて面倒ならそれ専用の Decorator を用意してやるとかそんなのかな。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-05 18:13
引用:

囚人さんの書き込み (2006-05-05 14:05) より:

こういう類の事に継承を使うのは個人的にはあまり好かないですね。
Label.BorderStyle にも矛盾が生じるのではないでしょうか。


いいえ、コントロールの量産のためにはコントロール内部で解決すべきだと思います。
また、BorderStyle がどう矛盾するのかわかりませんが、BorderStyle も拡張しますから、問題ないでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-05 18:39
引用:

いいえ、コントロールの量産のためにはコントロール内部で解決すべきだと思います。


量産という観念で見ればじゃんぬさんの仰るとおりかもしれませんが、この程度の事(枠の描画違い)に継承を使うというのはやや大袈裟な感がしますね。(Factory を用意すればあるいは量産にも対応できるか…。でもそのほうが大袈裟か)

引用:

また、BorderStyle がどう矛盾するのかわかりませんが、BorderStyle も拡張しますから、問題ないでしょう。


BorderStyle プロパティはオーバーライド可能になっていますが、どの BorderStyle 列挙体の値を設定されても「点線の枠」描画という風にするということでしょうか。そうなると機能拡張ではなく機能制限のように感じます。

普通の枠にしたいときは、通常の Label インスタンスを作り、点線の枠にしたいときは、拡張 Label インスタンスを作る。枠ごときにインスタンスを変更せねばならないのは妙ではないでしょうか?

どのやり方も間違いではないと思っていますが、この辺の匙加減は悩みどころです。
_________________
囚人のジレンマな日々

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