Olayları tüketen

Olaya bir uygulamada kullanmak için program mantığı olayına yanıt olarak yürütür ve olay işleyicisi olay kaynağıyla kaydeden bir olay işleyicisi (olay işleme yöntemi) sağlamanız gerekir. Bu işlem olay kablo olarak adlandırılır. Windows Forms ve Web Forms visual tasarımcılarına basitleştirin veya olay gömme Ayrıntıları gizlemek hızlı uygulama geliştirme (rad) araçları sağlar.

Bu konuda, olayları işleme genel bir desene açıklanmaktadır. Olay modelinde genel bir bakış için.net Framework Bkz: olaylar ve temsilciler. Windows Forms'da olay modeli hakkında daha fazla bilgi için bkz: Nasıl yapılır: bir Windows Forms uygulaması içinde olayları tüketebilir. Web Forms'da olay modeli hakkında daha fazla bilgi için bkz: Nasıl yapılır: olayları bir Web Forms uygulamasında kullanmak.

Olay deseni

Olay kablolama ayrıntılarını, farklı düzeylerde rad farklı araçlarla sağlanan destek nedeniyle Windows Forms ve Web Forms farklıdır. Ancak, aşağıdaki özelliklere sahip aynı olay deseni iki senaryoyu izleyin:

  • Adlı bir olayı harekete geçiren bir sınıf EventName aşağıdaki üyesi vardır:
Public Event EventName As EventNameEventHandler
public event EventNameEventHandler EventName;
public:
    event EventNameEventHandler^ EventName;
  • Olay temsilcisi EventName olay EventNameEventHandler, aşağıdaki imzası ile:
Public Delegate Sub EventNameEventHandler(sender As Object, e As EventNameEventArgs)
public delegate void EventNameEventHandler(object sender, EventNameEventArgs e);
delegate void EventNameEventHandler(Object^ sender, EventNameEventArgs^ e);

Kullanmak için EventName olayı, olay işleyicisi temsilci olay aynı imza olmalıdır:

Sub EventHandler(sender As Object, e As EventNameEventArgs)
End Sub
void EventHandler(object sender, EventNameEventArgs e) {}
void EventHandler(Object^ sender, EventNameEventArgs^ e) {}

Not

Olay bir temsilci atayın.net Framework adlı EventNameEventHandler, belgelere terimi olay işleyicisinde olay işleme yöntemine başvurur iken.Adlandırma şemasının arkasında mantığı olan bir EventNameEventHandler gerçekten olay işleme olay işleyicisine (yöntem) noktaları için temsilci seçme.

Bir olay ilişkili herhangi bir veri yoksa, olayý çaðýrmak sınıfı kullanır System.EventHandler temsilci olarak ve System.EventArgs Olay verileri için. Veri ilişkili olan olayları öğesinden türetilmeli sınıfları kullanmak EventArgs için olay veri türü ve karşılık gelen olay türü temsilci. İşlemek istediğiniz, örneğin, bir MouseUp olay bir Windows Forms uygulaması içinde olay veri sınıfıdır MouseEventArgs ve olay temsilci MouseEventHandler. Adlandırma şemasının tam olarak yukarıda açıklanan kurallarına uygun şekilde birkaç fare olayları ortak sınıf Olay verileri ve ortak bir olay temsilci için kullandığını unutmayın. Fare olayları için olay işleyicisini aşağıdaki imzası olması gerekir:

Sub Mouse_Moved(sender As Object, e As MouseEventArgs)
End Sub
void Mouse_Moved(object sender, MouseEventArgs e){}
void Mouse_Moved(Object^ sender, MouseEventArgs^ e){}

Gönderen ve olay bağımsız değişken parametreleri olay işleyicisine fare olayı hakkında ek ayrıntılar sağlar. Ne olay ortaya gönderen nesnesini gösterir. MouseEventArgs parametresi, olayı, fare hareketi ayrıntılar sağlar. Birçok olay kaynaklarını olay için ek veri sağlamak ve birçok olay işleyicileri olay işleme olaya özgü verileri kullanın. Artırılarak ve olayları Olay özgü veri işleme gösteren bir örnek için bkz: nasıl: artırma ve tüketen olayları.

Not

Olayları da ortaya çıkan kullanıcı arabirimleri (kullanıcı arabirimleri) ve, aslında bağlamı dışında.net Framework olaylarını birçok UI olmayan sınıfları içerir.Ancak, tüm olayları burada açıklanan yapıdadır.

Bir sınıftan olaylarını tetiklemeye hakkında daha fazla bilgi için bkz: bir olay yükseltme.

Statik ve dinamik olayları

.NET Framework Olay bildirimleri için statik veya dinamik olarak kaydettirmek aboneleri sağlar. Statik olay iþleyicileri tüm olayları bunlar ele sınıf süresince etkin olur. Olayları işleme en yaygın yöntemi budur. Dinamik olay işleyicilerinin açıkça etkinleştirilir ve genellikle bazı koşullu program mantığı yanıtındaki program yürütme sırasında devre dışı. Örneğin, yalnızca belirli koşullar altında olay bildirimlerini gerektiğinde veya bir uygulamanın birden çok olay işleyicisini sağlar ve çalışma koşulları kullanmak için uygun olanı tanımlamak kullanılabilirler.

EventInfo.AddEventHandler Yöntemi dinamik olay işleyicileri ekler ve EventInfo.RemoveEventHandler yöntemi bunları devreden çıkarır. Tek tek dillerin dinamik olarak olayları işlemek için kendi özellikleri de sağlar. Aşağıdaki örnek tanımlayan bir TemperatureMonitor harekete geçiren sınıf bir TemperatureTheshold önceden tanımlanmış bir eşik sıcaklık eriştiğinde olay. Bu olaya abone olan bir olay işleyicisi sonra etkinleştirilir ve program çalışması sırasında devre dışı.

public class TemperatureEventArgs : Inherits EventArgs
   Private oldTemp As Decimal
   Private newTemp As Decimal

   Public ReadOnly Property OldTemperature As Decimal
      Get
         Return Me.oldTemp
      End Get   
   End Property

   Public ReadOnly Property NewTemperature As Decimal
      Get
         Return Me.newTemp
      End Get
   End Property

   Public Sub New(oldTemp As Decimal, newTemp As Decimal)
      Me.oldTemp = oldTemp
      Me.newTemp = newTemp   
   End Sub
End Class

Public Delegate Sub TemperatureEventHandler(sender As Object, _
                                            ev As TemperatureEventArgs)

Public Class TemperatureMonitor
   Private currentTemperature As Decimal
   Private threshholdTemperature As Decimal

   Public Event TemperatureThreshold As TemperatureEventHandler 

   Public Sub New(threshHold As Decimal)
      Me.threshholdTemperature = threshHold
   End Sub

   Public Sub SetTemperature(newTemperature As Decimal)
      If (Me.currentTemperature > threshholdTemperature And _
         newTemperature <= Me.threshholdTemperature) Or _
         (Me.CurrentTemperature < Me.threshholdTemperature And _
             newTemperature >= Me.threshholdTemperature) Then
         OnRaiseTemperatureEvent(newTemperature)
      End If
      Me.currentTemperature = newTemperature
   End Sub

   Public Function GetTemperature() As Decimal
      Return Me.currentTemperature
   End Function

   Protected Overridable Sub OnRaiseTemperatureEvent(newTemperature As Decimal)
      RaiseEvent TemperatureThreshold(Me, New TemperatureEventArgs(Me.currentTemperature, _ 
                                       newTemperature))
   End Sub                                       
End Class

Public Module Example
   Public Sub Main()
      Dim tempMon As New TemperatureMonitor(32d)
      tempMon.SetTemperature(33)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _
                        tempMon.GetTemperature())
      tempMon.SetTemperature(32)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _
                        tempMon.GetTemperature())

      ' Add event handler dynamically using Visual Basic syntax.
      AddHandler tempMon.TemperatureThreshold, AddressOf TempMonitor

      tempMon.SetTemperature(33)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _
                        tempMon.GetTemperature())
      tempMon.SetTemperature(34)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _
                        tempMon.GetTemperature())
      tempMon.SetTemperature(32)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _
                        tempMon.GetTemperature())

      ' Remove event handler dynamically using Visual Basic syntax.
      RemoveHandler tempMon.TemperatureThreshold, AddressOf TempMonitor

      tempMon.SetTemperature(31)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _ 
                        tempMon.GetTemperature())
      tempMon.SetTemperature(35)
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", _ 
                        tempMon.GetTemperature())
   End Sub

   Private Sub TempMonitor(sender As Object, e As TemperatureEventArgs)
      Console.WriteLine("   ***Warning: Temperature is changing from {0} to {1}.", _ 
                        e.OldTemperature, e.NewTemperature)
   End Sub 
End Module
' The example displays the following output:
'       Current temperature is 33 degrees Fahrenheit.
'       Current temperature is 32 degrees Fahrenheit.
'       Current temperature is 33 degrees Fahrenheit.
'       Current temperature is 34 degrees Fahrenheit.
'          ***Warning: Temperature is changing from 34 to 32.
'       Current temperature is 32 degrees Fahrenheit.
'       Current temperature is 31 degrees Fahrenheit.
'       Current temperature is 35 degrees Fahrenheit.
using System;

public class TemperatureEventArgs : EventArgs
{
   private decimal oldTemp;
   private decimal newTemp;

   public decimal OldTemperature
   {
      get { return this.oldTemp; }
   }

   public decimal NewTemperature
   {
      get { return this.newTemp; }
   }

   public TemperatureEventArgs(decimal oldTemp, decimal newTemp)
   {
      this.oldTemp = oldTemp;
      this.newTemp = newTemp;   
   }
}

public delegate void TemperatureEventHandler(object sender, TemperatureEventArgs ev);

public class TemperatureMonitor
{
   private decimal currentTemperature;
   private decimal threshholdTemperature;

   public event TemperatureEventHandler TemperatureThreshold; 

   public TemperatureMonitor(decimal threshhold)
   {
      this.threshholdTemperature = threshhold;
   }

   public void SetTemperature(decimal newTemperature)
   {
      if ( (this.currentTemperature > this.threshholdTemperature && 
           newTemperature <= this.threshholdTemperature) ||
           (this.currentTemperature < this.threshholdTemperature &&
           newTemperature >= this.threshholdTemperature) )
         OnRaiseTemperatureEvent(newTemperature);
      this.currentTemperature = newTemperature;
   }

   public decimal GetTemperature()
   {
      return this.currentTemperature;
   }

   protected virtual void OnRaiseTemperatureEvent(decimal newTemperature)
   {
      // Raise the event if it has subscribers.
      if (TemperatureThreshold != null)
         TemperatureThreshold(this, new TemperatureEventArgs(this.currentTemperature, 
                               newTemperature));
   }
}

public class Example
{
   public static void Main()
   {
      Example ex = new Example();
      ex.MonitorTemperatures();
   }

   public void MonitorTemperatures()
   {
      TemperatureMonitor tempMon = new TemperatureMonitor(32);
      tempMon.SetTemperature(33);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", 
                        tempMon.GetTemperature());
      tempMon.SetTemperature(32);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.",
                        tempMon.GetTemperature());

      // Add event handler dynamically using C# syntax.
      tempMon.TemperatureThreshold += this.TempMonitor;

      tempMon.SetTemperature(33);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", 
                        tempMon.GetTemperature());
      tempMon.SetTemperature(34);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", 
                        tempMon.GetTemperature());
      tempMon.SetTemperature(32);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.",
                        tempMon.GetTemperature());

      // Remove event handler dynamically using C# syntax.
      tempMon.TemperatureThreshold -= this.TempMonitor;

      tempMon.SetTemperature(31);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", 
                        tempMon.GetTemperature());
      tempMon.SetTemperature(35);
      Console.WriteLine("Current temperature is {0} degrees Fahrenheit.", 
                        tempMon.GetTemperature());
   }

   private void TempMonitor(object sender, TemperatureEventArgs e)
   {
      Console.WriteLine("   ***Warning: Temperature is changing from {0} to {1}.", 
                        e.OldTemperature, e.NewTemperature);
   } 
}
// The example displays the following output:
//       Current temperature is 33 degrees Fahrenheit.
//       Current temperature is 32 degrees Fahrenheit.
//       Current temperature is 33 degrees Fahrenheit.
//       Current temperature is 34 degrees Fahrenheit.
//          ***Warning: Temperature is changing from 34 to 32.
//       Current temperature is 32 degrees Fahrenheit.
//       Current temperature is 31 degrees Fahrenheit.
//       Current temperature is 35 degrees Fahrenheit.

Ayrıca bkz.

Görevler

Nasıl yapılır: olayları bir Web Forms uygulamasında kullanmak

Nasıl yapılır: bir Windows Forms uygulaması içinde olayları tüketebilir

Kavramlar

Olaylar ve temsilciler

Bir olayý çaðýrmak

Diğer Kaynaklar

İşleme ve olaylarını tetiklemeye yönelik