- PR -

カスタムコンポーネントについて

1
投稿者投稿内容
Hodgkin
常連さん
会議室デビュー日: 2003/07/18
投稿数: 34
投稿日時: 2004-09-14 11:05
いつもお世話になっております。

現在、VB.NET(.NET Framework1.0、VS.NET 2002)でC/Sのシステムを構築しております。

既存のSystem.Windows.Forms以下のコンポーネントを継承してコンポーネントを作成しています。
継承したコンポーネントの中ではプロパティの変更などを行なっています。
(例えば、DateTimePickerならCustomFormatを変更するとか・・・)

ここで下記のことが問題になりました。
作成したコンポーネントをフォーム上に貼り付けると、コンポーネントの内部で変更した
プロパティの情報がフォームのクラス内に記述されてしまうのです。
ということは、もしコンポーネント側でプロパティを修正しても各フォームにはその情報が
反映されないって事になります。
(順番的にフォームの初期化処理の方が後から起動されるので・・・)

同様の問題なのですが自作の継承して作成したコンボボックスのコンストラクタの中で
アイテムの追加を行なうと、その情報までもがそのコンポーネントを使用しているフォームに
記述されてしまいます。
コンストラクタでコーディングしなければ良いと言われればそれまでなのですが、
そういうものなのでしょうか?

これって、オブジェクト指向言語のIDEとしては致命的な気がするのですが・・・
もしかすると、VS.NETのどこかの設定を変えると問題が解決されるのでしょうか??


[ メッセージ編集済み 編集者: Hodgkin 編集日時 2004-09-14 11:19 ]
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2004-09-14 15:47
Hodgkinさん、こんにちは。

引用:

コンストラクタでコーディングしなければ良いと言われればそれまでなのですが、


このあたりの仕様についてキチンと説明しているドキュメントを真面目に探していないので何とも言えませんが、コントロールの初期化処理については、以下のような方法で如何でしょう。

コード:
Protected Overrides Sub OnCreateControl()
    MyBase.OnCreateControl()

    If (Not DesignMode) Then 
        Items.Clear()
        Items.Add("aaaaaaaaa")
        Items.Add("bbbbbbb")
        Items.Add("cccccccc")
    End If

End Sub



また、場合によってはカスタムデザイナやカスタムエディタが必要になるかも知れませんね。
karajan
ベテラン
会議室デビュー日: 2002/07/05
投稿数: 89
投稿日時: 2004-09-15 14:56
久しぶりの投稿です。

System.ComponentModel.DesignerSerializationVisibilityAttribute

上記がたぶん解決策になると思います。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-09-16 10:40
コンストラクタでコーディングして設定した値はクラスのプロパティの初期値になります。
この初期値を InitializeComponent() の中に入れないようにするには、
DefaultValueAttribute クラス を使います。


_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
1

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