- PR -

BackColorプロパティのオーバライドについて

1
投稿者投稿内容
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-12-21 14:03
いつもお世話になっております。
現在、VB.net2003にてWindowsアプリの開発を行っております。

さっそくの質問なのですが、現在Windows.Formのコンボボックスを継承し、
派生コントロールクラスを生成しております。

派生クラスでは、BackColorプロパティのオーバライドを行っております。
理由としては、
@当コントロールを使う側で、任意にBackColorを設定されていた場合、
 その設定を採用。
A任意に設定されていない場合、当コントロールにて設定したBackColorにする。

現在、下記のように実装しているのですが、なぜが画面によっては例外が発生してしまいます。(具体的にはTabControlを使用し、当コントロールが貼り付けられている場合)

例外内容としては、「このコントロールは透明な背景色をサポートしません。」となっています。

ロジックを拝見してみても、なぜ透明になるかがさっぱりわかりません・・・。
何か問題点はありますでしょうか?
お知恵をおかしくださいますよう、よろしくお願いいたします。

------------------------------------------------------------------------------
#Region " コンストラクタ"
Public Sub New()
cBackColorValue = "当コントロールで設定したい値"
End Sub
#End Region

#Region " 背景色オーバーライド"
Private cBackColorValue As System.Drawing.Color

Public Overrides Property BackColor() As System.Drawing.Color

Get
Return cBackColorValue
End Get

Set(ByVal Value As System.Drawing.Color)

cBackColorValue = Value
MyBase.BackColor = Value
End Set

End Property
#End Region


囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-12-21 14:51
本題と違いますが、オーバーライドする必要ないのでは。
コード:
#Region " コンストラクタ" 
Public Sub New() 
	'cBackColorValue = "当コントロールで設定したい値" 
	BackColor  = "当コントロールで設定したい値" 
End Sub 
#End Region 


で十分じゃありませんか?
_________________
囚人のジレンマな日々
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-25 11:05
引用:

.netさんの書き込み (2006-12-21 14:03) より:

(1)当コントロールを使う側で、任意にBackColorを設定されていた場合、その設定を採用。
(2)任意に設定されていない場合、当コントロールにて設定したBackColorにする。


に該当する箇所が、ソース中に見つけることができません。
本当に掲載されたソースがすべてなのでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-12-25 15:28

レスが遅くなり申し訳ございません。
早速のご返答ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-12-25 11:05) より:
引用:

.netさんの書き込み (2006-12-21 14:03) より:

(1)当コントロールを使う側で、任意にBackColorを設定されていた場合、その設定を採用。
(2)任意に設定されていない場合、当コントロールにて設定したBackColorにする。


に該当する箇所が、ソース中に見つけることができません。
本当に掲載されたソースがすべてなのでしょうか?




当方の認識違いなら申し訳ないのですが、
画面が表示される時(コントロールのインスタンスが生成される時)に
ロジックの流れる順序は下記と認識しております。

@コンストラクタ
   ↓
Aプロパティが一度、全て網羅される。

なので、各アプリで
設定していれば、設定したプロパティの値が
設定していなければ、当派生コントロールのコンストラクタで設定した値になったままになるのではないでしょうか?

認識違いであれば申し訳ないですが、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-25 16:18
引用:

.netさんの書き込み (2006-12-25 15:28) より:

なので、各アプリで
設定していれば、設定したプロパティの値が
設定していなければ、当派生コントロールのコンストラクタで設定した値になったままになるのではないでしょうか?


だったら、

引用:

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

本題と違いますが、オーバーライドする必要ないのでは。


になります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
.net
ベテラン
会議室デビュー日: 2005/04/11
投稿数: 95
投稿日時: 2006-12-25 16:26

ご返答ありがとうございます。

引用:

じゃんぬねっとさんの書き込み (2006-12-25 16:18) より:
引用:

.netさんの書き込み (2006-12-25 15:28) より:

なので、各アプリで
設定していれば、設定したプロパティの値が
設定していなければ、当派生コントロールのコンストラクタで設定した値になったままになるのではないでしょうか?


だったら、

引用:

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

本題と違いますが、オーバーライドする必要ないのでは。


になります。





すみません、そういう事でしたか。。。
確かにオーバライドせずに解決出来ておりました。
ご迷惑をお掛けしました・・・。
1

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