2011-12-29 4 views
-2

私はデリゲートとイベントに関する問題を解決しています。私はこの面では新聞です。私はイベントを呼び出す方法を知らない。C#で既存のイベントを使用するには?

いくつか教えてください。 ありがとうございます。

+2

さらに詳しい情報を入力してください。あなたは既存のイベントを起こそうとしていますか?イベントハンドラを割り当てようとしていますか?可能であれば、コード例で指定してください。 –

+0

あなたはどんな種類のイベントについて話していますか?問題のドメインを説明できますか? –

+0

http://www.akadia.com/services/dotnet_delegates_and_events.html – Maheep

答えて

1

イベントは、それが宣言されているクラスで呼び出すことができます。

buttonone.Click+= event1; 
buttonTwo.Click+= event1; 

フォアの詳細は見ています。まず、イベントがnullかどうかをチェックしたいと思うでしょう。

if (MyEvent != null) MyEvent(this, new EventArgs()); 

イベントに渡す引数は、イベントの宣言によって異なります。あなたに少し背景を与えるために、イベントは単なるコンパイラのトリックです。このよう

public event ChangedEventHandler Changed; 

などのイベントがコンパイルされるときには、何も外Changeを使用する一方、それが宣言された場所内にあるものはすべて、_changeを使用します

protected ChangedEventHandler _change; 
public ChangedEventHandler Change 
{ 
    add { _change += value; } 
    remove { _change -= value; } 
} 

のようになります。言い換えれば、宣言された場所の内部では、それは単なるデリゲートであり、すべての通常の規則が適用されます。ここで

1

は役に立つかもしれLinkがあり

// event_keyword.cs 
using System; 
public delegate void MyDelegate(); // delegate declaration 

public interface I 
{ 
    event MyDelegate MyEvent; 
    void FireAway(); 
} 

public class MyClass: I 
{ 
    public event MyDelegate MyEvent; 

    public void FireAway() 
    { 
     if (MyEvent != null) 
     MyEvent(); 
    } 
} 

public class MainClass 
{ 
    static private void f() 
    { 
     Console.WriteLine("This is called when the event fires."); 
    } 

    static public void Main() 
    { 
     I i = new MyClass(); 

     i.MyEvent += new MyDelegate(f); 
     i.FireAway(); 
    } 
} 

....イベントを呼び出すための簡単な例です。

+0

サンプルvikkyをありがとう。それは私のために役立ちます。イベントは、イベントを含むクラスによって呼び出されます。ご提供いただいた情報をありがとうございます。良い一日を。 – Tina

+0

ティナ、いつもウェルカム............. – vikky

0

デリゲートを定義したら、いつイベントを呼び出すかを定義する必要があります。つまり、特定の変数に任意の値を代入してイベントを呼び出すことができます。

ここでは、同じ変数クラスを使用してデリゲートを定義する例を示します。

public class callbackdel : EventArgs 
{ 
    public readonly string resp = null; 

    public callbackdel(string s) 
    { 
     resp = s; 
    } 
}  

public delegate void WorkerEndHandler(object o, callbackdel e); 

使用しているコントロールでは、このメソッドを追加する必要があります。

public void OnWorkEnd(object o, callbackdel e) 
{ 
     WorkEnd(o, e); 
} 

メソッドを作成してデリゲートを定義した後、単にそのメソッドを呼び出すだけで、任意のデリゲートからイベントを発生させることができます。

OnWorkEnd((object)this, e); 
0

あなたが最初にそれを宣言する必要があるイベントを使用して:

// Create some custom arguments for the event 
public class SampleEventArgs 
{ 
    public SampleEventArgs(string s) 
    { 
     Text = s; 
    } 
    public String Text {get; private set;} 
} 

// Define a class that uses the event 
public class EventPublisher 
{ 
    // Declare the delegate 
    public delegate void SampleEventHandler(object sender, SampleEventArgs e); 

    // Declare the event. 
    public event SampleEventHandler SampleEvent; 

    // Wrap the event in a protected virtual method 
    // to enable derived classes to raise the event. 
    protected virtual void RaiseSampleEvent() 
    { 
     // Raise the event by using the() operator. 
     if (SampleEvent != null) 
      SampleEvent(this, new SampleEventArgs("Hello")); 
    } 
} 

をあなたは、イベントをサブスクライブすることができます:EventPublisherRaiseSampleEvent()を実行するとき

EventPublisher publisher = new EventPublisher(); 
      publisher.SampleEvent += new EventPublisher.SampleEventHandler(SampleEventHandler); 

public void SampleEventHandler(object sender, SampleEventArgs args) 
     { 

     } 

あなたのイベントハンドラが呼び出されます

関連する問題