C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: カスタムコントロールの初期値


(過去ログ 104 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■61997 / inTopicNo.1)  カスタムコントロールの初期値
  
□投稿者/ Ruku (7回)-(2011/09/14(Wed) 20:45:44)

分類:[.NET 全般] 

現在、カスタムコントロールを作成しています。

デザイン時にフォームに貼り付けた際、デフォルトで Text プロパティに値が設定されます。(textBox1 など)
この初期値を変えたいと思い、ControlDesigner から派生したクラスを作成し、以下の実装を行いました。

public override void InitializeNewComponent(IDictionary defaultValues)
{
    base.InitializeNewComponent(defaultValues);
    defaultValues["Text"] = "あいう";
}

しかしこの場合、base.InitializeNewComponent を呼んだ時点で textBox1 なりの値が設定されてしまいます。

作成しているカスタムコントロールでは、Text プロパティに不正な値が設定されたら例外を投げるようにしています。
そのため、base.InitializeNewComponent 内で例外となってしまいます。

base.InitializeNewComponent を呼ばない場合、フォームへの追加なども行われなくなるため、これは行いたくありません。

何か良い方法はあるでしょうか。

よろしくお願いします。

引用返信 編集キー/
■62000 / inTopicNo.2)  Re[1]: カスタムコントロールの初期値
□投稿者/ shu (991回)-(2011/09/15(Thu) 07:54:08)
No61997 (Ruku さん) に返信

> public override void InitializeNewComponent(IDictionary defaultValues)
> {
> base.InitializeNewComponent(defaultValues);
> defaultValues["Text"] = "あいう";
> }
試してませんが、{}内の文を逆にするのはどうですか?
引用返信 編集キー/
■62002 / inTopicNo.3)  Re[2]: カスタムコントロールの初期値
□投稿者/ Ruku (8回)-(2011/09/15(Thu) 09:21:25)
No62000 (shu さん) に返信
返信ありがとうございます。

結果の前に訂正させてください。

defaultValues["Text"] = "あいう";
の部分ですが、これではそもそも設定されていませんでした。

this.Control.Text = "あいう";
で設定されます。
調査・実装を繰り返している内に間違ったようです。すみません。


その上で返信します。


> 試してませんが、{}内の文を逆にするのはどうですか?


this.Control.Text = "あいう";
base.InitializeNewComponent(defaultValues);

の場合、Text プロパティを設定した後に InitializeNewComponent が呼ばれるため、やはり例外となります。
# 事前情報と状況が変わってしまったため、申し訳ないです...

defaultValues の中には Text に関する値は入っていないようです。
親フォーム、Location、もう一つ何かの 3 つの要素が格納されているようです。(確証なし)



# Text プロパティの仕様を変更して、例外を投げるのを止めたほうが無難な気がしてきた。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -