- PR -

イベントの公開(特殊)

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

カスタムコントロールから以下のようにして、
ユーザコントロールをロードしています。
control = this.Page.LoadControl("userctl.ascx");

そして、このカスタムコントロールをWebFormに貼り付けています。
このとき、ユーザコントロールで定義したイベントをハンドルし、
カスタムコントロールで公開したいのですが、方法が分かりません。

controlのイベントの取得ができません。

皆様、何か良い方法は無いでしょうか?


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-02 22:18
 ユーザコントロールで発生したイベントをカスタムコントロールで受け取って、カスタムコントロールのイベントとして再送出してやればいいのでは?

 でも、動いてる?別のプロジェクトに持って行ったら動かないんじゃないかなぁ?
_________________
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-02-03 13:38
ご回答有り難う御座います。

ただ、controlの型指定が出来ないため(したくない)、
動的にイベントをハンドルしたいのですが、
可能でしょうか?

お願いします。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-02-03 14:46
こんにちは。

うまくいくかわかりませんが、control.GetType().GetEvents()(またはGetEvent)でEventInfoを取得し、AddEventHandlerでイベントを関連付け、発生したイベントをカスタムコントロールで再送出。。。。
(全く検証していないのでハズしてるかも)

なんでこんなことしたいのか、イマイチわかりませんが。
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-02-03 15:44
ご回答ありがとう御座います。

理由は、ユーザコントロールで、内部画面を実装し、
カスタムコントロールで概観(スキン)設定できるようにしたいからです。
方法が変でしょうか?
普通はどのような実装方法をとるのでしょうか?
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-02-03 19:42

_control.GetType().GetEvent("EditClick") += new EventHandler(Edit_Click);
この方法で試みてみましたが、Errorになります。

何か良い方法はないでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-03 21:08
引用:

beanさんの書き込み(2005-02-02 21:20)(2005-02-03 13:38)より:

カスタムコントロールから以下のようにして、ユーザコントロールをロードしています。そして、このカスタムコントロールをWebFormに貼り付けています。このとき、ユーザコントロールで定義したイベントをハンドルし、カスタムコントロールで公開したいのですが、方法が分かりません。controlのイベントの取得ができません。

ただ、controlの型指定が出来ないため(したくない)、動的にイベントをハンドルしたいのですが、可能でしょうか?


 したいことが伝わってきません(^_^;

 まず、WebカスタムコントロールとWebユーザコントロールを作ろうとしていることから、この2つがどのように動作し、どのような制約があるか知っているもの、と考えます。私の前のポストで、『でも、動いてる?別のプロジェクトに持って行ったら動かないんじゃないかなぁ?』というのは、この“制約”を考えてのことですが、これは大丈夫でしたか?

 Webユーザコントロールは、同じアプリケーションドメインになければ動作しません。これは、単純には同じプロジェクトでなければならないということです。Webカスタムコントロールになると別のプロジェクトになると思います。仮に、1つのソリューションで1つのアプリケーションとし、アプリケーションドメインが同じであるとしましょう。
 しかし、Webカスタムコントロールの目的は、いろいろなプロジェクトで同じコントロールを部品として使うことです。このWebカスタムコントロールを、他のソリューションで使おうとすると、Webユーザコントロールをロードするが為に、プロジェクトごとソリューションに追加しなければならない、そう思うのですが、いかがでしょうか?

 もしこれが、「Webユーザコントロールを切り替えるWebカスタムコントロールを作っている」ということなら、上記のことから目的とする動作をしないと思います。
 もちろん、単一のソリューションでしか使わない、ということでしたら、何ら問題はありません。が、それならば「Webユーザコントロールを切り替えるWebユーザコントロール」でもかまわないと思いますし、あるいはページのコード中に埋め込めばすむ話しではないでしょうか。

_________________
bean
常連さん
会議室デビュー日: 2004/12/01
投稿数: 30
投稿日時: 2005-02-08 11:16

どうしても以下のコードでエラーがでます。
何か指定がおかしいでしょうか?

myUserControl.GetType().GetEvent("myUserControlButtonClick").AddEventHandler(this, new EventHandler(Menu_Click));

オブジェクトがターゲットの型と一致しません。

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