<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FGUI_Windows_Forms%2Fevent</id>
		<title>Csharp/CSharp Tutorial/GUI Windows Forms/event - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FGUI_Windows_Forms%2Fevent"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/event&amp;action=history"/>
		<updated>2026-04-30T01:30:09Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/event&amp;diff=5487&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/event&amp;diff=5487&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/event&amp;diff=5488&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/event&amp;diff=5488&amp;oldid=prev"/>
				<updated>2010-05-26T12:15:41Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A .NET-compatible event==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
// Derive a class from EventArgs. &lt;br /&gt;
class MyEventArgs : EventArgs { &lt;br /&gt;
  public int eventnum; &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
// Declare a delegate for an event.  &lt;br /&gt;
delegate void MyEventHandler(object source, MyEventArgs arg); &lt;br /&gt;
 &lt;br /&gt;
// Declare an event class. &lt;br /&gt;
class MyEvent { &lt;br /&gt;
  static int count = 0; &lt;br /&gt;
 &lt;br /&gt;
  public event MyEventHandler SomeEvent; &lt;br /&gt;
 &lt;br /&gt;
  // This fires SomeEvent. &lt;br /&gt;
  public void OnSomeEvent() { &lt;br /&gt;
    MyEventArgs arg = new MyEventArgs(); &lt;br /&gt;
 &lt;br /&gt;
    if(SomeEvent != null) { &lt;br /&gt;
      arg.eventnum = count++; &lt;br /&gt;
      Console.WriteLine(&amp;quot;Event fired&amp;quot;);&lt;br /&gt;
      SomeEvent(this, arg); &lt;br /&gt;
    } &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class X { &lt;br /&gt;
  public void handler(object source, MyEventArgs arg) { &lt;br /&gt;
    Console.WriteLine(&amp;quot;Event &amp;quot; + arg.eventnum + &amp;quot; received by an X object.&amp;quot;); &lt;br /&gt;
    Console.WriteLine(&amp;quot;Source is &amp;quot; + source); &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class Y {  &lt;br /&gt;
  public void handler(object source, MyEventArgs arg) { &lt;br /&gt;
    Console.WriteLine(&amp;quot;Event &amp;quot; + arg.eventnum + &amp;quot; received by a Y object.&amp;quot;); &lt;br /&gt;
    Console.WriteLine(&amp;quot;Source is &amp;quot; + source); &lt;br /&gt;
    Console.WriteLine(); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    X ob1 = new X(); &lt;br /&gt;
    Y ob2 = new Y(); &lt;br /&gt;
    MyEvent evt = new MyEvent(); &lt;br /&gt;
 &lt;br /&gt;
    // Add handler() to the event list. &lt;br /&gt;
    evt.SomeEvent += ob1.handler; &lt;br /&gt;
    evt.SomeEvent += ob2.handler; &lt;br /&gt;
 &lt;br /&gt;
    // Fire the event. &lt;br /&gt;
    evt.OnSomeEvent(); &lt;br /&gt;
    evt.OnSomeEvent(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Event fired&lt;br /&gt;
Event 0 received by an X object.&lt;br /&gt;
Source is MyEvent&lt;br /&gt;
Event 0 received by a Y object.&lt;br /&gt;
Source is MyEvent&lt;br /&gt;
Event fired&lt;br /&gt;
Event 1 received by an X object.&lt;br /&gt;
Source is MyEvent&lt;br /&gt;
Event 1 received by a Y object.&lt;br /&gt;
Source is MyEvent&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Event and event handler==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.Reflection;&lt;br /&gt;
using System.Runtime.InteropServices;&lt;br /&gt;
class MyClass : IDisposable&lt;br /&gt;
{&lt;br /&gt;
    public event EventHandler OnInitialized;&lt;br /&gt;
    public event EventHandler OnDisposed;&lt;br /&gt;
    public void Init()&lt;br /&gt;
    {&lt;br /&gt;
        // Initialize our state...&lt;br /&gt;
        EventHandler onInit = OnInitialized;&lt;br /&gt;
        if (onInit != null)&lt;br /&gt;
            onInit(this, new EventArgs());&lt;br /&gt;
    }&lt;br /&gt;
    public void Dispose()&lt;br /&gt;
    {&lt;br /&gt;
        // Release our state...&lt;br /&gt;
        EventHandler onDisp = OnDisposed;&lt;br /&gt;
        if (onDisp != null)&lt;br /&gt;
            onDisp(this, new EventArgs());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
   public static void Main(){&lt;br /&gt;
        using (MyClass f = new MyClass())&lt;br /&gt;
        {&lt;br /&gt;
            f.OnInitialized += delegate { Console.WriteLine(&amp;quot;init&amp;quot;); };&lt;br /&gt;
            f.OnDisposed += delegate { Console.WriteLine(&amp;quot;disposed&amp;quot;); };&lt;br /&gt;
            f.Init();&lt;br /&gt;
        }            &lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;init&lt;br /&gt;
disposed&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;Event handlers are represented by delegates.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Events are members of a class&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Events are declared using the event keyword.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Its most commonly used form is shown here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;event event-delegate object;&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;event-delegate is the name of the delegate used to support the event.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;object is the name of the specific event object being created.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events: add and remove functions==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Button&lt;br /&gt;
{&lt;br /&gt;
    public delegate void ClickHandler(object sender, EventArgs e);&lt;br /&gt;
    &lt;br /&gt;
    public event ClickHandler Click;&lt;br /&gt;
    &lt;br /&gt;
    protected void OnClick()&lt;br /&gt;
    {&lt;br /&gt;
        if (Click != null)&lt;br /&gt;
        Click(this, null);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void DoClick()&lt;br /&gt;
    {&lt;br /&gt;
        OnClick();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    static public void ButtonHandler(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Button clicked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Button button = new Button();&lt;br /&gt;
        &lt;br /&gt;
        button.Click += new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
        &lt;br /&gt;
        button.Click -= new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Button clicked&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events: add and remove functions for a private delegate event==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Button&lt;br /&gt;
{&lt;br /&gt;
    public delegate void ClickHandler(object sender, EventArgs e);&lt;br /&gt;
    private ClickHandler click;&lt;br /&gt;
    &lt;br /&gt;
    public void AddClick(ClickHandler clickHandler)&lt;br /&gt;
    {&lt;br /&gt;
        click += clickHandler;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void RemoveClick(ClickHandler clickHandler)&lt;br /&gt;
    {&lt;br /&gt;
        click -= clickHandler;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    protected void OnClick()&lt;br /&gt;
    {&lt;br /&gt;
        if (click != null)&lt;br /&gt;
        click(this, null);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void DoClick()&lt;br /&gt;
    {&lt;br /&gt;
        OnClick();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    static public void ButtonHandler(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Button clicked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Button button = new Button();&lt;br /&gt;
        &lt;br /&gt;
        button.AddClick(new Button.ClickHandler(ButtonHandler));&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
        &lt;br /&gt;
        button.RemoveClick(new Button.ClickHandler(ButtonHandler));&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Button clicked&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events add and remove with synchronized block==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Runtime.rupilerServices;&lt;br /&gt;
public class Button&lt;br /&gt;
{&lt;br /&gt;
    public delegate void ClickHandler(object sender, EventArgs e);&lt;br /&gt;
    &lt;br /&gt;
    Hashtable delegateStore = new Hashtable();&lt;br /&gt;
    static object clickEventKey = new object();&lt;br /&gt;
    &lt;br /&gt;
    public event ClickHandler Click&lt;br /&gt;
    {&lt;br /&gt;
        [MethodImpl(MethodImplOptions.Synchronized)]&lt;br /&gt;
        add&lt;br /&gt;
        {&lt;br /&gt;
            delegateStore[clickEventKey] =&lt;br /&gt;
            Delegate.rubine((Delegate) delegateStore[clickEventKey],&lt;br /&gt;
            value);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        [MethodImpl(MethodImplOptions.Synchronized)]&lt;br /&gt;
        remove&lt;br /&gt;
        {&lt;br /&gt;
            delegateStore[clickEventKey] =&lt;br /&gt;
            Delegate.Remove((Delegate) delegateStore[clickEventKey],&lt;br /&gt;
            value);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    protected void OnClick()&lt;br /&gt;
    {&lt;br /&gt;
        ClickHandler ch = (ClickHandler) delegateStore[clickEventKey];&lt;br /&gt;
        if (ch != null)&lt;br /&gt;
        ch(this, null);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void DoClick()&lt;br /&gt;
    {&lt;br /&gt;
        OnClick();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    static public void ButtonHandler(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Button clicked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Button button = new Button();&lt;br /&gt;
        &lt;br /&gt;
        button.Click += new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
        &lt;br /&gt;
        button.Click -= new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Button clicked&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events and form controls==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing.Drawing2D;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
    public class Events : Form&lt;br /&gt;
    {&lt;br /&gt;
        public Events()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
        }&lt;br /&gt;
        private void button1_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            MessageBox.Show(&amp;quot;I have been Clicked&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        private void textBox1_MouseEnter(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = &amp;quot;Mouse Enters into the TextBox&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
        private void textBox1_MouseLeave(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            label1.Text = &amp;quot;Mouse Leaves the TextBox&amp;quot;;            &lt;br /&gt;
        }&lt;br /&gt;
        private void textBox1_KeyDown(object sender, KeyEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            if (e.Alt == true)&lt;br /&gt;
                label1.Text=&amp;quot;The ALT has been pressed&amp;quot;;&lt;br /&gt;
            else&lt;br /&gt;
                if (e.Control==true)&lt;br /&gt;
                    label1.Text=&amp;quot;The Ctrl has been pressed&amp;quot;;&lt;br /&gt;
                else&lt;br /&gt;
                    if (e.Shift==true)&lt;br /&gt;
                    label1.Text=&amp;quot;The Shift has been pressed&amp;quot;;                &lt;br /&gt;
        }&lt;br /&gt;
        private void textBox1_KeyUp(object sender, KeyEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            if (e.Alt == false || e.Control==false || e.Shift==false) &lt;br /&gt;
                label1.Text = &amp;quot;The Key has been released&amp;quot;;                    &lt;br /&gt;
        }&lt;br /&gt;
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            if (char.IsDigit(e.KeyChar)==true)&lt;br /&gt;
                  label1.Text = &amp;quot;You have pressed a Numeric key&amp;quot;;&lt;br /&gt;
               else&lt;br /&gt;
                  if(char.IsLetter(e.KeyChar)==true)&lt;br /&gt;
                  label1.Text = &amp;quot;You have pressed a Letter key&amp;quot;;&lt;br /&gt;
            &lt;br /&gt;
               &lt;br /&gt;
        }                &lt;br /&gt;
        private void InitializeComponent()&lt;br /&gt;
        {&lt;br /&gt;
            this.button1 = new System.Windows.Forms.Button();&lt;br /&gt;
            this.textBox1 = new System.Windows.Forms.TextBox();&lt;br /&gt;
            this.label1 = new System.Windows.Forms.Label();&lt;br /&gt;
            this.SuspendLayout();&lt;br /&gt;
            // &lt;br /&gt;
            // button1&lt;br /&gt;
            // &lt;br /&gt;
            this.button1.Location = new System.Drawing.Point(94, 23);&lt;br /&gt;
            this.button1.Name = &amp;quot;button1&amp;quot;;&lt;br /&gt;
            this.button1.Size = new System.Drawing.Size(75, 23);&lt;br /&gt;
            this.button1.TabIndex = 0;&lt;br /&gt;
            this.button1.Text = &amp;quot;Click Me&amp;quot;;&lt;br /&gt;
            this.button1.UseVisualStyleBackColor = true;&lt;br /&gt;
            this.button1.Click += new System.EventHandler(this.button1_Click);&lt;br /&gt;
            // &lt;br /&gt;
            // textBox1&lt;br /&gt;
            // &lt;br /&gt;
            this.textBox1.Location = new System.Drawing.Point(81, 78);&lt;br /&gt;
            this.textBox1.Multiline = true;&lt;br /&gt;
            this.textBox1.Name = &amp;quot;textBox1&amp;quot;;&lt;br /&gt;
            this.textBox1.Size = new System.Drawing.Size(103, 70);&lt;br /&gt;
            this.textBox1.TabIndex = 1;&lt;br /&gt;
            this.textBox1.MouseLeave += new System.EventHandler(this.textBox1_MouseLeave);&lt;br /&gt;
            this.textBox1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyDown);&lt;br /&gt;
            this.textBox1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.textBox1_KeyUp);&lt;br /&gt;
            this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);&lt;br /&gt;
            this.textBox1.MouseEnter += new System.EventHandler(this.textBox1_MouseEnter);&lt;br /&gt;
            // &lt;br /&gt;
            // label1&lt;br /&gt;
            // &lt;br /&gt;
            this.label1.Font = new System.Drawing.Font(&amp;quot;Microsoft Sans Serif&amp;quot;, 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));&lt;br /&gt;
            this.label1.Location = new System.Drawing.Point(12, 169);&lt;br /&gt;
            this.label1.Name = &amp;quot;label1&amp;quot;;&lt;br /&gt;
            this.label1.Size = new System.Drawing.Size(268, 23);&lt;br /&gt;
            this.label1.TabIndex = 2;&lt;br /&gt;
            this.label1.Text = &amp;quot;label1&amp;quot;;&lt;br /&gt;
            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;&lt;br /&gt;
            // &lt;br /&gt;
            // Events&lt;br /&gt;
            // &lt;br /&gt;
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);&lt;br /&gt;
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;&lt;br /&gt;
            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;
            this.Controls.Add(this.label1);&lt;br /&gt;
            this.Controls.Add(this.textBox1);&lt;br /&gt;
            this.Controls.Add(this.button1);&lt;br /&gt;
            this.Name = &amp;quot;Events&amp;quot;;&lt;br /&gt;
            this.Text = &amp;quot;Events&amp;quot;;&lt;br /&gt;
            this.ResumeLayout(false);&lt;br /&gt;
            this.PerformLayout();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private System.Windows.Forms.Button button1;&lt;br /&gt;
        private System.Windows.Forms.TextBox textBox1;&lt;br /&gt;
        private System.Windows.Forms.Label label1;&lt;br /&gt;
        &lt;br /&gt;
        [STAThread]&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            Application.EnableVisualStyles();&lt;br /&gt;
            Application.SetCompatibleTextRenderingDefault(false);&lt;br /&gt;
            Application.Run(new Events());&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Events: Custom Add and Remove with Global delegate cache.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;// copyright 2000 Eric Gunnerson&lt;br /&gt;
// From A Programmer&amp;quot;s Introduction to C# 2.0, Third Edition&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Runtime.rupilerServices;&lt;br /&gt;
//&lt;br /&gt;
// Global delegate cache. Uses a two-level hashtable. The delegateStore hashtable &lt;br /&gt;
// stores a hashtable keyed on the object instance, and the instance hashtable is &lt;br /&gt;
// keyed on the unique key. This allows fast tear-down of the object when it&amp;quot;s destroyed.&lt;br /&gt;
//&lt;br /&gt;
public class DelegateCache&lt;br /&gt;
{&lt;br /&gt;
    private DelegateCache() {}    // nobody can create one of these&lt;br /&gt;
    &lt;br /&gt;
    Hashtable delegateStore = new Hashtable();    // top level hash table&lt;br /&gt;
    &lt;br /&gt;
    static DelegateCache dc = new DelegateCache();    // our single instance&lt;br /&gt;
    &lt;br /&gt;
    Hashtable GetInstanceHash(object instance)&lt;br /&gt;
    {&lt;br /&gt;
        Hashtable instanceHash = (Hashtable) delegateStore[instance];&lt;br /&gt;
        &lt;br /&gt;
        if (instanceHash == null)&lt;br /&gt;
        {&lt;br /&gt;
            instanceHash = new Hashtable();&lt;br /&gt;
            delegateStore[instance] = instanceHash;&lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        return(instanceHash);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Combine(Delegate myDelegate, object instance, object key)&lt;br /&gt;
    {&lt;br /&gt;
        lock(instance)&lt;br /&gt;
        {&lt;br /&gt;
            Hashtable instanceHash = dc.GetInstanceHash(instance);        &lt;br /&gt;
            &lt;br /&gt;
            instanceHash[key] = Delegate.rubine((Delegate) instanceHash[key],&lt;br /&gt;
            myDelegate);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Remove(Delegate myDelegate, object instance, object key)&lt;br /&gt;
    {&lt;br /&gt;
        lock(instance)&lt;br /&gt;
        {&lt;br /&gt;
            Hashtable instanceHash = dc.GetInstanceHash(instance);        &lt;br /&gt;
            &lt;br /&gt;
            instanceHash[key] = Delegate.Remove((Delegate) instanceHash[key],&lt;br /&gt;
            myDelegate);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static Delegate Fetch(object instance, object key)&lt;br /&gt;
    {&lt;br /&gt;
        Hashtable instanceHash = dc.GetInstanceHash(instance);        &lt;br /&gt;
        &lt;br /&gt;
        return((Delegate) instanceHash[key]);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void ClearDelegates(object instance)&lt;br /&gt;
    {&lt;br /&gt;
        dc.delegateStore.Remove(instance);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Button&lt;br /&gt;
{&lt;br /&gt;
    public void TearDown()&lt;br /&gt;
    {&lt;br /&gt;
        DelegateCache.ClearDelegates(this);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    public delegate void ClickHandler(object sender, EventArgs e);&lt;br /&gt;
    &lt;br /&gt;
    static object clickEventKey = new object();&lt;br /&gt;
    &lt;br /&gt;
    public event ClickHandler Click&lt;br /&gt;
    {&lt;br /&gt;
        add&lt;br /&gt;
        {&lt;br /&gt;
            DelegateCache.rubine(value, this, clickEventKey);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        remove&lt;br /&gt;
        {&lt;br /&gt;
            DelegateCache.Remove(value, this, clickEventKey);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    protected void OnClick()&lt;br /&gt;
    {&lt;br /&gt;
        ClickHandler ch = (ClickHandler) DelegateCache.Fetch(this, clickEventKey);&lt;br /&gt;
        &lt;br /&gt;
        if (ch != null)&lt;br /&gt;
        ch(this, null);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void SimulateClick()&lt;br /&gt;
    {&lt;br /&gt;
        OnClick();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class Test&lt;br /&gt;
{&lt;br /&gt;
    static public void ButtonHandler(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Button clicked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Button button = new Button();&lt;br /&gt;
        &lt;br /&gt;
        button.Click += new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.SimulateClick();&lt;br /&gt;
        &lt;br /&gt;
        button.Click -= new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.TearDown();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Button clicked&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fire event in property setter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class SalaryEvent : EventArgs&lt;br /&gt;
{&lt;br /&gt;
  public string Message;&lt;br /&gt;
  public SalaryEvent(string message)&lt;br /&gt;
  {&lt;br /&gt;
    this.Message = message;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class Employee&lt;br /&gt;
{&lt;br /&gt;
  private int salary;&lt;br /&gt;
  public delegate void SalaryTaxEventHandler( object reactor, SalaryEvent myEvent );&lt;br /&gt;
  public event SalaryTaxEventHandler OnTax;&lt;br /&gt;
  public int Salary&lt;br /&gt;
  {&lt;br /&gt;
    set&lt;br /&gt;
    {&lt;br /&gt;
      salary = value;&lt;br /&gt;
      if (salary &amp;gt; 1000)&lt;br /&gt;
      {&lt;br /&gt;
        SalaryEvent myEvent = new SalaryEvent(&amp;quot;Employee meltdown in progress!&amp;quot;);&lt;br /&gt;
        OnTax(this, myEvent);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
public class EmployeeMonitor&lt;br /&gt;
{&lt;br /&gt;
  public EmployeeMonitor(Employee myEmployee)&lt;br /&gt;
  {&lt;br /&gt;
    myEmployee.OnTax += new Employee.SalaryTaxEventHandler(DisplayMessage);&lt;br /&gt;
  }&lt;br /&gt;
  public void DisplayMessage( object myEmployee, SalaryEvent myEvent )&lt;br /&gt;
  {&lt;br /&gt;
    Console.WriteLine(myEvent.Message);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
  public static void Main()&lt;br /&gt;
  {&lt;br /&gt;
    Employee myEmployee = new Employee();&lt;br /&gt;
    EmployeeMonitor myEmployeeMonitor = new EmployeeMonitor(myEmployee);&lt;br /&gt;
    myEmployee.Salary = 100;&lt;br /&gt;
    myEmployee.Salary = 500;&lt;br /&gt;
    myEmployee.Salary = 2000;&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Employee meltdown in progress!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ignored Parameters Anonymous Methods for Button click, kepressed and mouse clicked action==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
    class MainClass&lt;br /&gt;
    {&lt;br /&gt;
        static void Main()&lt;br /&gt;
        {&lt;br /&gt;
            Button button = new Button();&lt;br /&gt;
            button.Text = &amp;quot;Click me&amp;quot;;&lt;br /&gt;
            button.Click += delegate { Console.WriteLine(&amp;quot;LogPlain&amp;quot;); };&lt;br /&gt;
            button.KeyPress += delegate { Console.WriteLine(&amp;quot;LogKey&amp;quot;); };&lt;br /&gt;
            button.MouseClick += delegate { Console.WriteLine(&amp;quot;LogMouse&amp;quot;); };&lt;br /&gt;
            Form form = new Form();&lt;br /&gt;
            form.AutoSize = true;&lt;br /&gt;
            form.Controls.Add(button);&lt;br /&gt;
            Application.Run(form);&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use an anonymous method as an event handler==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;  &lt;br /&gt;
  &lt;br /&gt;
delegate void MyEventHandler();  &lt;br /&gt;
  &lt;br /&gt;
class MyEvent {  &lt;br /&gt;
  public event MyEventHandler SomeEvent;  &lt;br /&gt;
  &lt;br /&gt;
  public void OnSomeEvent() {  &lt;br /&gt;
    if(SomeEvent != null)  &lt;br /&gt;
      SomeEvent();  &lt;br /&gt;
  }  &lt;br /&gt;
}  &lt;br /&gt;
  &lt;br /&gt;
class MainClass {  &lt;br /&gt;
  public static void Main() {   &lt;br /&gt;
    MyEvent evt = new MyEvent();  &lt;br /&gt;
  &lt;br /&gt;
    // Use an anonymous method as an event handler. &lt;br /&gt;
    evt.SomeEvent += delegate  {  &lt;br /&gt;
      // This is the event handler. &lt;br /&gt;
      Console.WriteLine(&amp;quot;Event received.&amp;quot;);  &lt;br /&gt;
    }; &lt;br /&gt;
 &lt;br /&gt;
    evt.OnSomeEvent();  &lt;br /&gt;
    evt.OnSomeEvent();  &lt;br /&gt;
  }  &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Event received.&lt;br /&gt;
Event received.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use delegate to handle events==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System;&lt;br /&gt;
public class Button&lt;br /&gt;
{&lt;br /&gt;
    public delegate void ClickHandler(object sender, EventArgs e);&lt;br /&gt;
    public ClickHandler Click;&lt;br /&gt;
    &lt;br /&gt;
    protected void OnClick()&lt;br /&gt;
    {&lt;br /&gt;
        if (Click != null)&lt;br /&gt;
           Click(this, null);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public void DoClick()&lt;br /&gt;
    {&lt;br /&gt;
        OnClick();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
class MainClass&lt;br /&gt;
{&lt;br /&gt;
    static public void ButtonHandler(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Button clicked&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static void Main()&lt;br /&gt;
    {&lt;br /&gt;
        Button button = new Button();&lt;br /&gt;
        &lt;br /&gt;
        button.Click = new Button.ClickHandler(ButtonHandler);&lt;br /&gt;
        &lt;br /&gt;
        button.DoClick();&lt;br /&gt;
    }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Button clicked&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Use the built-in EventHandler delegate==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;using System; &lt;br /&gt;
 &lt;br /&gt;
// Declare an event class. &lt;br /&gt;
class MyEvent { &lt;br /&gt;
  public event EventHandler SomeEvent; // uses EventHandler delegate &lt;br /&gt;
 &lt;br /&gt;
  // This is called to fire SomeEvent. &lt;br /&gt;
  public void OnSomeEvent() { &lt;br /&gt;
    if(SomeEvent != null) &lt;br /&gt;
      SomeEvent(this, EventArgs.Empty); &lt;br /&gt;
  } &lt;br /&gt;
} &lt;br /&gt;
 &lt;br /&gt;
class MainClass { &lt;br /&gt;
  static void handler(object source, EventArgs arg) { &lt;br /&gt;
    Console.WriteLine(&amp;quot;Event occurred&amp;quot;); &lt;br /&gt;
    Console.WriteLine(&amp;quot;Source is &amp;quot; + source); &lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
  public static void Main() {  &lt;br /&gt;
    MyEvent evt = new MyEvent(); &lt;br /&gt;
 &lt;br /&gt;
    // Add handler() to the event list. &lt;br /&gt;
    evt.SomeEvent += handler; &lt;br /&gt;
 &lt;br /&gt;
    // Fire the event. &lt;br /&gt;
    evt.OnSomeEvent(); &lt;br /&gt;
  } &lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;pre class=codeResult&amp;gt;Event occurred&lt;br /&gt;
Source is MyEvent&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using Event Accessors==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;You can use event accessors to take control of the event handler list.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;The accessors specify how the event handler list is implemented.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This form is shown here:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;event event-delegate event-name {&lt;br /&gt;
        add {&lt;br /&gt;
            // code to add an event to the chain&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        remove {&lt;br /&gt;
            // code to remove an event from the chain&lt;br /&gt;
        }&lt;br /&gt;
    }&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>