Csharp/CSharp Tutorial/GUI Windows Forms/Event System

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Inference And Contravariance for Button Click, KeyPress, and MouseClick

<source lang="csharp">using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.ruponentModel;

   class InferenceAndContravariance
   {
       static void LogPlainEvent(object sender, EventArgs e)
       {
           Console.WriteLine ("An event occurred");
       }
       static void Main()
       {
           Button button = new Button();
           button.Text = "Click me";
           button.Click += LogPlainEvent;
           button.KeyPress += LogPlainEvent;
           button.MouseClick += LogPlainEvent;
           Form form = new Form();
           form.AutoSize = true;
           form.Controls.Add(button);
           Application.Run(form);
       }
   }</source>

Use .Net event system

<source lang="csharp">using System; public class SalaryEvent : EventArgs {

 public string Message;
 public SalaryEvent(string message)
 {
   this.Message = message;
 }

} public class Employee {

 private int salary;
 public delegate void SalaryTaxEventHandler( object reactor, SalaryEvent myEvent );
 public event SalaryTaxEventHandler OnTax;
 public int Salary
 {
   set
   {
     salary = value;
     if (salary > 1000)
     {
       SalaryEvent myEvent = new SalaryEvent("Employee meltdown in progress!");
       OnTax(this, myEvent);
     }
   }
 }

} public class EmployeeMonitor {

 public EmployeeMonitor(Employee myEmployee)
 {
   myEmployee.OnTax += new Employee.SalaryTaxEventHandler(DisplayMessage);
 }
 public void DisplayMessage( object myEmployee, SalaryEvent myEvent )
 {
   Console.WriteLine(myEvent.Message);
 }

}

class MainClass {

 public static void Main()
 {
   Employee myEmployee = new Employee();
   EmployeeMonitor myEmployeeMonitor = new EmployeeMonitor(myEmployee);
   myEmployee.Salary = 100;
   myEmployee.Salary = 500;
   myEmployee.Salary = 2000;
 }

}</source>

Employee meltdown in progress!