- PR -

カスタムコントロールの継承

1
投稿者投稿内容
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2004-12-01 13:52
いつもお世話になっております。

現在ASP.NETカスタムコントロールを作成しています。
継承に関して教えて下さい。

基本クラス(Webcontrolを継承)で内でprivateのボタンを作成し、
イベント(private)をハンドリングしています。
この基本クラスを継承した派生クラスを作り、
このクラス内では、新たにボタンを作成し、
イベントをハンドリングしています。
この派生クラスをWebFormで使用しているのですが、
基本クラス内のボタンのイベントが発生しません。
派生クラス内のボタンのイベントは発生します。

やりたいことは、基本クラス内にあるボタンのイベントは、
基本クラス内で処理し、派生クラスは一切関与しないようにしたいのですが...

こういう方法はむりなのでしょうか?
ご教授下さい。
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2004-12-01 14:31
以下に、ソースを載せます。

public abstract class HeaderBase : System.Web.UI.WebControls.WebControl
{
private ImageButton _btnClose = new ImageButton();

public HeaderBase() : base()
{
}

private void PageHeader_Close(object sender, ImageClickEventArgs e)
{
//このイベントで処理を記述したい。
//現状、このイベントが発生してくれない。
}

protected override void CreateChildControls()
{
//イベントに追加
_btnClose.Click += new ImageClickEventHandler(PageHeader_Close);
base.Controls.Add(_btnClose);
}

protected override void Render(HtmlTextWriter output)
{
base.Render(output);
}
}
このクラスを継承した派生クラスを実際には使用しています。
基本クラス内のイベントが発生しません。
何か方法はないでしょうか?

お願いします。



壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2004-12-01 18:11
System.Web.UI.INamingContainer
を調べてみてください。
壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2004-12-01 18:23
ちょっと不親切でしたね。

http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcondevelopingcompositecontrols.asp

こちらが参考になると思います。

あと、翔泳社の.NETマガジンの11月頭に発行されたものに
複合コントロールのサンプルがあったと思います。(VB.NETですが・・・)
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2004-12-01 21:32
有り難う御座います、解決です。
なるほど、そう言うことなんですね。

ちなみに、このような実装方法は正しいのでしょうか?
ベースとなるコントロールを継承して使う、
もしくは、ベースとなるコントロールを作成し、
そのコントロールに子コントロールを追加する。
どちらが正しいのでしょうか。
壱丸3
常連さん
会議室デビュー日: 2004/09/13
投稿数: 34
投稿日時: 2004-12-01 22:04
引用:

beanさんの書き込み (2004-12-01 21:32) より:

ちなみに、このような実装方法は正しいのでしょうか?
ベースとなるコントロールを継承して使う、
もしくは、ベースとなるコントロールを作成し、
そのコントロールに子コントロールを追加する。
どちらが正しいのでしょうか。




仰っている事の意図していることが
ちょっと私にはわかりかねます。申し訳ございません。
でも、何が正しいかは目的によって変わると思いますし、
提示された情報からは一概には言えないでしょう。
完全な正解というものもないと思います。

カスタムコントロールに限らず、
MSDNにおいて設計や実装に関するガイドラインが
豊富に提供されておりますので、
私はそれを参考にするようにしています。
1

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