0

OnLoadWinForm でイベントを別のオブジェクトに登録したい- 次のようなもの:

 SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));

これは可能ですか?これを行うために「SomeObject」側で「ヘルパー」のデリゲートまたは式を作成してもかまいませんが、RegisterEvent(...).

4

3 に答える 3

2

RegisterEvent メソッドは次のようにする必要があります。

void RegisterEvent(Action<EventHandler> addEventHandler)
{
    addEventHandler((sender, e) =>
    {
        // loaded
    });
}

使用法:

someObject.RegisterEvent(handler => { this.OnLoad += handler; });
于 2012-04-11T20:53:44.353 に答える
0
 SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; });
于 2012-04-11T20:55:05.880 に答える
0

そのようなものが本当に必要な場合 (常に良い質問です。通常、このようなものは、デザインについて少し奇妙なことを示す兆候ですが、そうである必要はありません)、

The Reactive Extensions (Rx)を見た方がいいと思います... .
それらは、多かれ少なかれプロパティやメソッドのように、独自の「イベント」を処理および起動することを容易にします (そして、デリゲート、追加/サブスクライブ、またはプライベート制限などの典型的な苦痛はなく、少し単純化されています)。
...そして、これは次のようになります...

someObjectInstance.MyEvent.Subscribe(d=>
{
    // ... your lambda more or less
});  

...そして、クラスには単純化された場合Subject<MyEventData> _myEvent;_myEvent.OnNext(data)(上昇したいメソッド内に入る)+そのフィールドを公開するプロパティ(IObservable<MyEventData> MyEvent {get{return _myEvent;}})があります。

それはあなたが本当に欲しいものです。

NuGet からインストールして、数分で使用できます。よりトリッキーなケースには学習曲線がありますが。

さらに、将来のイベントを組み合わせることで、さらに多くのメリットが得られます。

(「それらの1つ」ではなく、非常に優れた新しいテクノロジーです)

于 2012-04-11T21:05:01.467 に答える