シンプルなシナリオ:イベントを発生させるカスタムクラス。このイベントをフォーム内で消費し、それに反応したいと思います。それ、どうやったら出来るの?コード例、してください!C#で他のクラスのイベントを購読するには?
フォームとカスタムクラスは別のクラスであることに注意してください。フォーム内
シンプルなシナリオ:イベントを発生させるカスタムクラス。このイベントをフォーム内で消費し、それに反応したいと思います。それ、どうやったら出来るの?コード例、してください!C#で他のクラスのイベントを購読するには?
フォームとカスタムクラスは別のクラスであることに注意してください。フォーム内
public class EventThrower
{
public delegate void EventHandler(object sender, EventArgs args) ;
public event EventHandler ThrowEvent = delegate{};
public void SomethingHappened()
{
ThrowEvent(this, new EventArgs());
}
}
public class EventSubscriber
{
private EventThrower _Thrower;
public EventSubscriber()
{
_Thrower = new EventThrower();
//using lambda expression..could use method like other answers on here
_Thrower.ThrowEvent += (sender, args) => { DoSomething(); };
}
private void DoSomething()
{
//Handle event.....
}
}
:
void SubscribeToEvent(OtherClass theInstance)
{
theInstance.SomeEvent += this.MyEventHandler;
}
void MyEventHandler(object sender, EventArgs args)
{
// Do something on the event
}
あなただけの他のクラスのイベントにあなたの形式でイベントをするためにするのと同じ方法をサブスクライブします。
1)メソッド(イベントハンドラ)に、他のクラスのイベントのデリゲートタイプと一致する適切な宣言があることを確認する必要があります。
2)他のクラスのイベントがあなたに見えるようにする必要があります(例:公開または内部)。
3)クラス自体ではなく、クラスの有効なインスタンスをサブスクライブします。
はあなたのイベントのイベントハンドラによって処理されると仮定すると、このコードは動作します:あなたの「カスタムイベントは、」処理するためにいくつかの他の署名を必要とする場合
がprotected void Page_Load(object sender, EventArgs e)
{
MyClass myObj = new MyClass();
myObj.MyEvent += new EventHandler(this.HandleCustomEvent);
}
private void HandleCustomEvent(object sender, EventArgs e)
{
//handle the event
}
、あなたが代わりにそのいずれかを使用する必要があります。
すばらしいソリューションをありがとう。私は質問を投稿した直後にそれを理解しました。私の解決策はあなたと非常に似ています。 – sarsnake
http://stackoverflow.com/questions/8335131/winform-events-in-another-class-net2-simplify-delegate .NET2での実装 –
@CSgarpAtlこれは正解として選択されています。残念ながら、私はすべてのステップに従っていても動作させることはできません。私は私のメインフォームが自分のユーザーコントロールで起こった方法を認識するようにしようとしています。 – Disasterkid