EventHandler EventHandler EventHandler EventHandler Delegate

定義

代表處理不含事件資料之事件的方法。Represents the method that will handle an event that has no event data.

public delegate void EventHandler(System::Object ^ sender, EventArgs ^ e);
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public delegate void EventHandler(object sender, EventArgs e);
type EventHandler = delegate of obj * EventArgs -> unit
Public Delegate Sub EventHandler(sender As Object, e As EventArgs)

參數

sender
Object Object Object Object

事件的來源。The source of the event.

e
EventArgs EventArgs EventArgs EventArgs

不包含事件資料的物件。An object that contains no event data.

繼承
EventHandlerEventHandlerEventHandlerEventHandler
屬性

範例

下列範例示範一個名稱為事件ThresholdReached相關聯EventHandler委派。The following example shows an event named ThresholdReached that is associated with an EventHandler delegate. 若要指派的方法EventHandler呼叫委派OnThresholdReached方法。The method assigned to the EventHandler delegate is called in the OnThresholdReached method.

using namespace System;

public ref class ThresholdReachedEventArgs : public EventArgs
{
   public:
      property int Threshold;
      property DateTime TimeReached;
};

public ref class Counter
{
   private:
      int threshold;
      int total;

   public:
      Counter() {};

      Counter(int passedThreshold)
      {
         threshold = passedThreshold;
      }

      void Add(int x)
      {
          total += x;
          if (total >= threshold) {
             ThresholdReachedEventArgs^ args = gcnew ThresholdReachedEventArgs();
             args->Threshold = threshold;
             args->TimeReached = DateTime::Now;
             OnThresholdReached(args);
          }
      }

      event EventHandler<ThresholdReachedEventArgs^>^ ThresholdReached;

   protected:
      virtual void OnThresholdReached(ThresholdReachedEventArgs^ e)
      {
         ThresholdReached(this, e);
      }
};

public ref class SampleHandler
{
   public:
      static void c_ThresholdReached(Object^ sender, ThresholdReachedEventArgs^ e)
      {
         Console::WriteLine("The threshold of {0} was reached at {1}.",
                            e->Threshold,  e->TimeReached);
         Environment::Exit(0);
      }
};

void main()
{
   Counter^ c = gcnew Counter((gcnew Random())->Next(10));
   c->ThresholdReached += gcnew EventHandler<ThresholdReachedEventArgs^>(SampleHandler::c_ThresholdReached);

   Console::WriteLine("press 'a' key to increase total");
   while (Console::ReadKey(true).KeyChar == 'a') {
      Console::WriteLine("adding one");
      c->Add(1);
   }
}
using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Counter c = new Counter(new Random().Next(10));
            c.ThresholdReached += c_ThresholdReached;

            Console.WriteLine("press 'a' key to increase total");
            while (Console.ReadKey(true).KeyChar == 'a')
            {
                Console.WriteLine("adding one");
                c.Add(1);
            }
        }

        static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e)
        {
            Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold,  e.TimeReached);
            Environment.Exit(0);
        }
    }

    class Counter
    {
        private int threshold;
        private int total;

        public Counter(int passedThreshold)
        {
            threshold = passedThreshold;
        }

        public void Add(int x)
        {
            total += x;
            if (total >= threshold)
            {
                ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();
                args.Threshold = threshold;
                args.TimeReached = DateTime.Now;
                OnThresholdReached(args);
            }
        }

        protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
        {
            EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
            if (handler != null)
            {
                handler(this, e);
            }
        }

        public event EventHandler<ThresholdReachedEventArgs> ThresholdReached;
    }

    public class ThresholdReachedEventArgs : EventArgs
    {
        public int Threshold { get; set; }
        public DateTime TimeReached { get; set; }
    }
}
Module Module1

    Sub Main()
        Dim c As Counter = New Counter(New Random().Next(10))
        AddHandler c.ThresholdReached, AddressOf c_ThresholdReached

        Console.WriteLine("press 'a' key to increase total")
        While Console.ReadKey(True).KeyChar = "a"
            Console.WriteLine("adding one")
            c.Add(1)
        End While
    End Sub

    Sub c_ThresholdReached(sender As Object, e As ThresholdReachedEventArgs)
        Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached)
        Environment.Exit(0)
    End Sub
End Module

Class Counter
    Private threshold As Integer
    Private total As Integer

    Public Sub New(passedThreshold As Integer)
        threshold = passedThreshold
    End Sub

    Public Sub Add(x As Integer)
        total = total + x
        If (total >= threshold) Then
            Dim args As ThresholdReachedEventArgs = New ThresholdReachedEventArgs()
            args.Threshold = threshold
            args.TimeReached = DateTime.Now
            OnThresholdReached(args)
        End If
    End Sub

    Protected Overridable Sub OnThresholdReached(e As ThresholdReachedEventArgs)
        RaiseEvent ThresholdReached(Me, e)
    End Sub

    Public Event ThresholdReached As EventHandler(Of ThresholdReachedEventArgs)
End Class

Class ThresholdReachedEventArgs
    Inherits EventArgs

    Public Property Threshold As Integer
    Public Property TimeReached As DateTime
End Class

備註

.NET Framework 中的事件模型根據具有與其處理常式連接事件的事件委派。The event model in the .NET Framework is based on having an event delegate that connects an event with its handler. 若要引發事件,則需要兩個項目:To raise an event, two elements are needed:

  • 識別的方法委派,可提供回應事件。A delegate that identifies the method that provides the response to the event.

  • (選擇性) 如果此事件提供資料會保留事件資料類別。Optionally, a class that holds the event data, if the event provides data.

委派是一種類型,會定義簽章,也就是傳回的實值型別和方法的參數清單型別。The delegate is a type that defines a signature, that is, the return value type and parameter list types for a method. 您可以使用的委派類型來宣告的變數,可以參考任何具有相同的簽章與委派的方法。You can use the delegate type to declare a variable that can refer to any method with the same signature as the delegate.

標準事件處理常式委派的簽章定義不會傳回值的方法。The standard signature of an event handler delegate defines a method that does not return a value. 這個方法的第一個參數的類型是Object和參考引發事件的執行個體。This method's first parameter is of type Object and refers to the instance that raises the event. 第二個參數衍生自類型EventArgs和保留事件資料。Its second parameter is derived from type EventArgs and holds the event data. 如果事件不會產生事件資料,第二個參數是只要值EventArgs.Empty欄位。If the event does not generate event data, the second parameter is simply the value of the EventArgs.Empty field. 否則,第二個參數是型別衍生自EventArgs,並提供給任何欄位或保留的事件資料所需的屬性。Otherwise, the second parameter is a type derived from EventArgs and supplies any fields or properties needed to hold the event data.

EventHandler委派是預先定義的委派,特別是表示不會產生資料的事件的事件處理常式方法。The EventHandler delegate is a predefined delegate that specifically represents an event handler method for an event that does not generate data. 如果您的活動會產生資料,您必須使用泛型EventHandler<TEventArgs>委派類別。If your event does generate data, you must use the generic EventHandler<TEventArgs> delegate class.

若要將處理之事件的方法與關聯事件,將加入至事件的委派的執行個體。To associate the event with the method that will handle the event, add an instance of the delegate to the event. 除非您移除委派,否則每當事件發生時就會呼叫事件處理常式。The event handler is called whenever the event occurs, unless you remove the delegate.

如需有關事件處理常式委派的詳細資訊,請參閱處理和引發事件For more information about event handler delegates, see Handling and Raising Events.

Extension Methods

GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate) GetMethodInfo(Delegate)

取得物件,表示指定的委派所表示的方法。Gets an object that represents the method represented by the specified delegate.

適用於

另請參閱