No.1
- 回答日時:
根本的には仕様の見直しをすべきですが……。
外部のプログラムは自分がコールバックが欲しいイベントに対して登録するのですから,判断が必要な状況自体がおかしいわけです。
それはともかく……。
どうしても必要ならば,Custom Eventを使えばAddHandlerやRemoveHandlerのタイミングを捉えることができます。
http://msdn.microsoft.com/ja-jp/library/6hwhs172 …
EventHandler型のフィールドをバックグラウンドとしてもっておいて,
AddHandlerでCombine/RemoveHandlerでRemoveし,
さらに判定用のプロパティを用意して,
そのプロパティではフィールドがNothing「ではない」かどうかを返せばよいと思います。
この回答への補足
Custom Eventを用いた場合、DLL呼び元側で用意するなどの処置が
必要になると思いますが、
そうでは無く、コントロール側だけの実装で対応したいのですが無理でしょうか?
コントロールがすでに提供済みの為、
呼元側に手を加えずに、対応しないと行けない状態なのです。
後出して申し訳ありませんが、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
> Custom Eventを用いた場合、DLL呼び元側で用意するなどの処置が
> 必要になると思いますが、
> そうでは無く、コントロール側だけの実装で対応したいのですが無理でしょうか?
イベントハンドラを登録する側のコードに変化はありません。
イベントに対してAddHandlerする場合,
対象イベントがCustom Eventであろうがなかろうが同一コードになります。
# というか,おそらくMSILレベルで同一。
そして,イベントにハンドラが登録されているかどうかを調べる方法は,
イベントを実装する側で登録の有無を記録することが唯一の方法になります。
# No.2さんのリフレクションによる方法は,内部実装の変化に追従できない。
イベントへの登録の有無が必要になるのは
a. イベントを持つクラス
b. イベントハンドラを登録するクラス
c. 上記以外のクラス
のどれでしょうか。
aであればCustom Eventにして事が足ります。
修正するのはイベントを持つクラスになります。
bであればAddHandlerのタイミングでフラグを立てれば事が足ります。
修正するのはイベントハンドラを登録するクラスになります。
cであればCustom Eventにしてさらにプロパティで外部に登録されているかを公開することになります。
修正するのはイベントを持つクラスとそのクラスを使うクラスになります。
ただし,最初に構成を見直すことをやはりお薦めします。
ハンドラの有無の確認は,C#でイベントを書いている場合くらいしか必要になるとは思えないので。
# C#ではRaiseEvent相当がないので,if (Event != null) Event(this, e);みたいに書かざるをえない。
返事遅れてすみません。
上記の件を色々検証したのですが、どうもうまくいかないため
結局、ご指摘通り、別仕様で対応する事になりました。
色々ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS VS.NETのコードを色合いも含めてHtmlに貼り付けたい。 1 2023/02/02 14:15
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- その他(学校・勉強) 教員もしくは校長(経験者含む)の方へ/学校運営に関するご質問 1 2023/06/21 14:24
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(アニメ・マンガ・特撮) イベントの参加について 1 2022/07/14 08:23
- 訴訟・裁判 ①こうゆう裁判↓は、本人訴訟でしてるのですか。 ②なんでニュースになるのですか。本人がマスコミにタレ 3 2023/07/11 12:05
- 法学 既判力 時的限界について 1 2023/03/15 11:46
- 営業・販売・サービス アパレル店で飲食物を販売する際の許可について 1 2022/04/08 19:11
- 哲学 大学で哲学の講義を履修しているのですが、さっぱり内容が分かりません。真面目に講義は受けているつもりで 1 2022/05/28 18:16
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
このQ&Aを見た人はこんなQ&Aも見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
DataGrdViewに関連付けたデータの更新
C言語・C++・C#
-
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
-
4
.NET SqlDataReader のレコード有無判定
Visual Basic(VBA)
-
5
CloseとDisposeの違い
Visual Basic(VBA)
-
6
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
7
VB.NETでマウスクリックイベントを発生させたい。
Visual Basic(VBA)
-
8
VB.NETで小数点以下の桁数を取得したい
その他(ソフトウェア)
-
9
Loadイベント中にほかのイベントを発生したくない
その他(プログラミング・Web制作)
-
10
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
-
11
入庫と出庫
英語
-
12
DatagridViewの値確定
Visual Basic(VBA)
-
13
exe間での引き値の受け取り方法
Visual Basic(VBA)
-
14
FriendとPublicの違い。。。
Visual Basic(VBA)
-
15
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
16
SELECT 文 GROUP での1件目を取得
SQL Server
-
17
frxファイルの役目
Visual Basic(VBA)
-
18
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
19
VB.NET2005 TextBox 高さ(Height) 変更
Visual Basic(VBA)
-
20
変数の参照でエラーが出てしまいます。(VB.NET)
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ダイアログクラスのコントロー...
-
ウィンドウの背景に画像を配置する
-
既定のコンストラクタがない?
-
【C++】vectorについて
-
VC++ リストボックスにデータを...
-
MFCアプリのコマンドラインでパ...
-
VB.NETでのEnumの使用について
-
このコンパイルエラーの意味に...
-
CMainFrameクラスの使い方
-
C++ protectedにアクセス不可
-
派生クラスから基本クラスprote...
-
C#で、動的にサブクラスを取得...
-
System.Net.HttpWebRequest、も...
-
Visual C++ 6.0 でクラス表示が...
-
クラスのアドレスを引数として...
-
vba sendKeysを送る相手のソフ...
-
MFCのドラッグ&ドロップについて
-
Delphi6でVB.NETで作成のDLL呼出
-
C++では構造体がメンバ関数をも...
-
継承を重ねた場合のコストはど...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
イベントにAddHandlerされてい...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールのイベ...
-
エディットコントロールでEnter...
-
WindowsAPIのリストビューの...
-
CMainFrameクラスの使い方
-
DebugクラスとTraceクラスの違い
-
MessageBoxを継承したい
-
C++ protectedにアクセス不可
-
MFCアプリのコマンドラインでパ...
-
このコンパイルエラーの意味に...
-
MFCのドラッグ&ドロップについて
-
【ASP.NET】 独自で作成したク...
-
派生クラスから基本クラスprote...
-
ダイアログクラスのコントロー...
-
C#で通常のbuttonコントロール...
おすすめ情報