- PR -

ラベルの枠に点線

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-05 18:57
引用:

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

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


「拡張」だと言っていますから、これはありません。
BorderStyle 列挙体を "そのまま" 使おうとするからそうなるのです。

新しい型を作るか、あるいは別のプロパティに定めるかになるでしょう。
後者の場合は、Single の時以外は無効化しておくことになります。

このあたりの結びつけは簡単にできますが、問題なのは使用者側が意識しにくくなることでしょうね。
前者の場合は使用者の意識は簡単にできますが、覆い隠していることに違和感があります。
(サービス指向を取るか、オブジェクト指向を取るかですね)

引用:

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


えっと、使い分けるという方向で考える必要はないと思います。
保守性を考えれば、このプロジェクトではすべて MyLabel を使う方向になるでしょう。

 "Single 時の初期値を定めることで、通常の Label としての機能を邪魔しません"

そのための、"カスタム" コントロールという言い回しだと思います。

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

えっと、使い分けるという方向で考える必要はないと思います。
保守性を考えれば、このプロジェクトではすべて MyLabel を使う方向になるでしょう。


引用:

そのための、"カスタム" コントロールという言い回しだと思います。


なるほど。
確かに統一性のあるデザインを持ったアプリを作るときは「カスタムコントロール」はアリですね。
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-05 21:21
引用:

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

なるほど。
確かに統一性のあるデザインを持ったアプリを作るときは「カスタムコントロール」はアリですね。


クライアント側は、コンポーネント中心で考えるのが .NET 言語だと思います。
このあたりが、Delphi に似通ってるなんて思っています。

あとは、元質問者さんの投稿待ちですね。(;^-^)
何とも VSUG の方で答えが出ちゃってますけどね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
victor
常連さん
会議室デビュー日: 2002/10/29
投稿数: 46
お住まい・勤務地: アスンシオン - パラグアイ
投稿日時: 2006-05-06 05:49
皆さん、色々な意見をありがとうございます。

独自にコントロールを作成するのはやったことないので、今回の件は別の方法を使いました。
チョッとしたCADアプリみたいのものを作ってて、その中でラベルを使ってます、そこで選択されたラベルを強調するのに枠を点線にしようと思ったのですが、思ったより難しそうなので、BackColorを変えるという方法でラベルを強調することにしました。

時間的に余裕がないので簡単な方法をとりました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-06 08:11
引用:

victorさんの書き込み (2006-05-06 05:49) より:

思ったより難しそうなので、BackColorを変えるという方法でラベルを強調することにしました。


OnPaint メソッドでのベタ書きによる実装であれば、それほど難しくはありません。
参考ということで書いておきます。

コード:

    protected override void OnPaint(System.Windows.Forms.PaintEventArgs pe) {
        base.OnPaint(pe);

        using (System.Drawing.Pen hPen = new System.Drawing.Pen(System.Drawing.Color.Red, 1);
            hPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
            pe.Graphics.DrawRectangle(hPen, 0, 0, this.Width - 1, this.Height - 1);
        }
    }

コード:

    Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
        MyBase.OnPaint(pe)

        Dim hPen As System.Drawing.Pen

        Try
            hPen = New System.Drawing.Pen(System.Drawing.Color.Red, 1)
            hPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot
            pe.Graphics.DrawRectangle(hPen, 0, 0, Me.Width - 1, Me.Height - 1)
        Finally
            If Not hPen Is Nothing Then
                hPen.Dispose()
            End If
        End Try
    End Sub


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-07 00:04
僕は、コントロールを拡張することは、よくやります。
しかし、考え方としては点線枠機能が付いたラベルコントロールという考え方より
点線枠ラベルとか、そんな安易な名前にしちゃってますw
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-07 08:23
引用:

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

しかし、考え方としては点線枠機能が付いたラベルコントロールという考え方より
点線枠ラベルとか、そんな安易な名前にしちゃってますw


それこそ、囚人さんの仰る "機能制限" にあたりませんか?
これだと、コントロールを使い分ける必要があり、

引用:

保守性を考えれば、このプロジェクトではすべて MyLabel を使う方向になるでしょう。


という考え方ができなくなり、旨みを逃がしてしまうことになります。
通常は、

引用:

"Single 時の初期値を定めることで、通常の Label としての機能を邪魔しません"


のように、初期値 (既定値) としては通常の Label と同じ機能を果たしておくのが望ましいです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2006-05-07 08:58
インターフェイスを使ってその機能が必要なときだけキャストするというのはダメですか?

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