私はずっとGoogleの後、デリゲートとイベントがどのように機能するのかまだ分かりません。デリゲートとイベントの処理に関する問題
私が達成したいのは、 クラス1がアニメーションを再生しているときに、クラス2がデリゲート/イベントをクラス2に渡し、クラス2がアニメーションENDで何かを行うようにします。
上記の動作をどのようにコードすることができますか?
私はずっとGoogleの後、デリゲートとイベントがどのように機能するのかまだ分かりません。デリゲートとイベントの処理に関する問題
私が達成したいのは、 クラス1がアニメーションを再生しているときに、クラス2がデリゲート/イベントをクラス2に渡し、クラス2がアニメーションENDで何かを行うようにします。
上記の動作をどのようにコードすることができますか?
非常に基本的なイベントの実装...
public delegate void Class1AnimationCompletedHandler(object sender, EventArgs e);
public class Class1
{
public event Class1AnimationCompletedHandler AnimationCompleted;
private void OnAnimationCompleted(EventArgs e)
{
if (this.AnimationCompleted != null)
{
// raises the AnimationCompleted event
this.AnimationCompleted(this, e);
}
}
public void Animate()
{
// do your animation steps here
this.OnAnimationCompleted(new EventArgs());
}
}
public class Class2
{
private Class1 c1;
public Class2()
{
// initialize the class
c1 = new Class1();
// attach this.Class1_AnimationCompleted to the AnimationCompleted event;
c1.AnimationCompleted += new Class1AnimationCompletedHandler(this.Class1_AnimationCompleted);
}
private void Class1_AnimationCompleted(object sender, EventArgs e)
{
// do your post-animation stuff here
}
}
このlinkは、イベントを作成する方法について良い簡単な例を提供します。これはVS 2003を対象としていますが、まだ適用されています。
パブリッシャー(イベントを公開するクラス)とサブスクライバー(イベントにハンドラーを登録するクラス)と考えることができます。
上記のシナリオでは、Class1のDoSomethingをClass2から直接呼び出すことはできませんか?
ここには2つのクラスがあります。上記の事例についてお話していると思います。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ClassA a = new ClassA();
a.Finished += delegate(object sender, EventArgs e)
{
ClassB b = new ClassB();
b.DoWork();
};
a.Animate();
}
}
をし、出力は次のようになります:
public class ClassA
{
public event EventHandler Finished;
public ClassA() {}
public void Animate()
{
Console.WriteLine("ClassA instance animating.");
if (Finished != null)
Finished(this, null);
}
}
public class ClassB
{
public ClassB() {}
public void DoWork()
{
Console.WriteLine("ClassB instance doing work.");
}
}
次にあなたが勝利のフォームを持っていた場合、あなたが持っていると思います
ClassA instance animating.
ClassB instance doing work.
のでClass1
がイベントを公開します、Class2
先のデリゲートを添付します。アニメーションが終了すると、Class1
がイベントを発生させます。それはあなたが必要とするものですか?
class Class1
{
public delegate void AnimationEndHandler();
public event AnimationEndHandler AnimationEnded;
public void Animation()
{
//do the animation
Console.WriteLine("Animation ended. This is class 1");
AnimationEnded();
}
}
class Class2
{
public Class2(Class1 c1)
{
c1.AnimationEnded += new Class1.AnimationEndHandler(DoSomethingOnAnimationEnd);
}
public void DoSomethingOnAnimationEnd()
{
Console.WriteLine("Animation ended. This is class 2");
}
}
static void Main(string[] args)
{
Class1 c1 = new Class1();
Class2 c2 = new Class2(c1);
c1.Animation();
}
ありがとうございます!最後に私はそれを働かせました! –