- PR -

カスタムコントロールについて

1
投稿者投稿内容
ジャック
会議室デビュー日: 2003/12/15
投稿数: 9
投稿日時: 2003-12-15 23:22
いつもお世話になっております。
ASP.NET(C#)でカスタムコントロールを作成しております。
WebControlを継承しCreateChildControlsにてTable、Buttonを作成しています。
publicでboolのプロパティを公開し、デザイン時に設定して、
Buttonの表示/非表示を設定したいのですが、上手くいきません。
デザインのプロパティボックスには出てきます。
そこで、True、Falseを変更しても変わりません。
どなたか、ご教授ください。

きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-16 08:49
ジャックさん、お早うございます。

引用:

Buttonの表示/非表示を設定したいのですが、上手くいきません。
デザインのプロパティボックスには出てきます。


何がどう上手くいかないのか、判らないんですが...。

1)プロパティボックス上で値を変更出来ない
2)プロパティボックス上で値を変更出来るが、変更が保持されない
3)変更出来て値も保持されるが、実行時に反映されない

上記3つのうち、どれかに当てはまりますか?
ジャック
会議室デビュー日: 2003/12/15
投稿数: 9
投稿日時: 2003-12-16 10:15
お返事有り難う御座います。

状況は、プロパティボックス上では値を変更できます。
変更出来てもデザイン時の見栄えが変わりません。
さらに実行時も値が保持されておらず見栄えが変わりません。
以上のような状況です。
何かわかりますでしょうか?
よろしくお願いいたします。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-16 11:41
ジャックさん、こんにちは。

引用:

変更出来てもデザイン時の見栄えが変わりません。
さらに実行時も値が保持されておらず見栄えが変わりません。


Buttonの表示/非表示の切替は、 Render メソッド内に記述すれば、デザイン時、プロパティの変更に応じてリアルタイムに反映されるはずです。
値が保持されないというのは、具体的にどういう状況なんでしょう?
ジャック
会議室デビュー日: 2003/12/15
投稿数: 9
投稿日時: 2003-12-16 12:59
お返事有り難う御座います。

カスタムコントロール内では以下のプロパティを宣言しております。

[Bindable(true), Category("Appearance"), DefaultValue(true)]
public Boolean MyButtonVivible
{
get
{
return m_fMyButtonVivible; //メンバ変数
}
set
{
m_fMyButtonVivible = value;
this.EnsureChildControls();
}
}

また、CreateChildControlsではメンバ変数の値により
ボタンを作成しています。

protected override void CreateChildControls()
{

     //バックボタン
if(m_fMyButtonVivible== true)
{
               ボタン作成処理

      Controls.Add();
}
}

しかしながら、デザイン時のプロパティボックスで
MyButtonVivibleのTrue、Falseを変更しても、デザインの見栄えが変わりません。

また、実行時もボタンは表示されません。
デバックで、メンバ変数m_fMyButtonVivibleを内容を見ても
Falseが入っちゃっています。

何かわかりますでしょうか?
よろしくお願いいたします。




きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-16 15:26
ジャックさん、こんにちは。

取り敢えず、デフォルト値が true なのであれば、m_fMyButtonVivible は true で初期化しておいた方が良いかと。
で、CreateChildControls メソッド内で、m_fMyButtonVivible の値に応じてボタンを生成したりしなかったりしているようですが、常に生成するようにして、(前回の投稿内容の繰り返しになりますが) Render メソッドをオーバーライドして、その中で
m_MyButton.Visible = m_fMyButtonVivible;
とすれば解決...するように見えます。
ジャック
会議室デビュー日: 2003/12/15
投稿数: 9
投稿日時: 2003-12-16 19:45
お返事有り難う御座います。

renderに記述したらうまく動きました。
(そう言うものなのでしょうか...)
皆様、有り難うございました。
きくちゃん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 854
お住まい・勤務地: 都内某所
投稿日時: 2003-12-17 09:07
ジャックさん、お早うございます。

引用:

renderに記述したらうまく動きました。


おめでとうございます。

引用:

(そう言うものなのでしょうか...)


CreateChildControls メソッドや他のメソッド、イベントの役割や発生タイミング等については、「.NET Framework 開発者ガイド」-「コントロール実行の有効期間」に一度目を通してみて下さい。
なお、投稿されたコードの中で、プロパティに値がセットされるたびに EnsureChildControls メソッド を呼び出していましたが、このメソッドの機能についても、もう一度、調べてみて下さい。何故、プロパティを変更してもボタンの表示/非表示が切り替えられなかったかが判ると思います。
1

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