0

イベントに関するオンラインチュートリアルを読んだ後、私はほとんど何が起こっているのかについての考えを持っていると思います。値が5より大きい場合にイベントをトリガーするために、次の非常に単純なコードを開発しました。コードはかなり役に立たないことはわかっていますが、それを使用してポイントを伝えています。(メインの代わりに、ボタンイベントを使用してコードをトリガーしました。)

//declare the delegate
public delegate void MyDelegate(string str);

public class SomeClass
{
    public event MyDelegate MyEventFromDelegate;
    private int i;
    public int I
    {
            get
            { return i; }
            set
            {
                if (value > 5)
                {
                    MyEventFromDelegate("Value Greater than 5");
                    i = 0;
                }
                else
                {
                    i = value;
                }
            }
    }

}

public partial class Form1 : Form
{
    public Form1()
    { InitializeComponent();  }

    public void Method_To_Call(String rx)
    {   MessageBox.Show("This method will be called if greater than 5");}

    private void button1_Click(object sender, EventArgs e)
    {
        SomeClass a = new SomeClass();
        a.MyEventFromDelegate +=new MyDelegate(Method_To_Call);
        a.I = 12;
    }
}

私がここで持っている唯一の懸念は、私たちが声明でイベントを提起したいときです

MyEventFromDelegate("Value Greater than 5");

後で(ボタンクリックイベントで)イベントがトリガーされるたびに呼び出す関数を実際に割り当てる場合は、この時点でイベントにパラメーターを渡します。

4

1 に答える 1

1

非常に単純な例では、SomeClassインスタンス "a"は非常に短命であり、Method_To_Callに渡されたrxパラメーターを使用していないため、意味がありません。

フォームメソッドbutton1_Clickは、デリゲートを介してボタンのClickイベントに接続されています。ボタンは、クリックされたときにどのコードが実行されるかを認識していません。クリックされたことを通知するだけです。そのシグナルは、デリゲートを使用して実装されます。

チェックされた値が渡される整数パラメーターを持つものとしてデリゲートを定義することができます。次に、イベントメソッドは値が5より大きい場合にのみ呼び出されますが、イベントメソッド内では、実際の値に応じて異なる方法で処理を行うことができます。

//declare the delegate
public delegate void MyDelegate(int aValue);

public class SomeClass
{
    public event MyDelegate MyEventFromDelegate;
    private int i;
    public int I
    {
            get
            { return i; }
            set
            {
                if (value > 5)
                {
                    MyEventFromDelegate(value);
                    i = 0;
                }
                else
                {
                    i = value;
                }
            }
    }

}

public partial class Form1 : Form
{
    public Form1()
    {
      InitializeComponent();  
    }

    public void Method_To_Call(int aValue)
    {   
      MessageBox.Show("This method signals that value is greater than 5. Value=" + aValue.ToString());
    }

    private void button1_Click(object sender, EventArgs e)
    {
        SomeClass a = new SomeClass();
        a.MyEventFromDelegate +=new MyDelegate(Method_To_Call);
        a.I = 12;
    }
}
于 2012-11-09T01:49:36.500 に答える