-4

Delegateタイプと文字列形式がありfunctionます。その関数をに追加するにはどうすればよいdelegateですか?

データ可能なイベント;

/* Having Records

Control Events      MethodName
ControlName     Validating      Leave       Enter
TextBox1        Textbox1_Validating TextBox1_Leave  --

*/

foreach(DataRow Row in Events.Rows)
{
    if (Row["Validating"].ToString() != "")
    {
//Here is I need a help that how can i add Textbox1_Validating event in 
//TextBox1.Validating
    }
}
4

3 に答える 3

2

一部の単純な実装ではMethodIndo、ラムダから呼び出すときに別のレベルの間接化を使用し、それを type のデリゲート インスタンスに割り当てますFunc<int, string>。より複雑なデリゲート変換が存在することに注意してください。

void Main()
{
    string methodName = "SomeMethod";

    var methodInfo = this.GetType().GetMethod(methodName);

    Action<string> myFunc = str => methodInfo.Invoke(this, new object[]{str});

    MyEvent += myFunc;

    MyEvent("value");

}
public event Action<string> MyEvent = delegate{}; 
                                    //default so that not to check for null

public void SomeMethod(string val)
{
    Console.WriteLine ("event called with: " + val);
}

版画

event called with: value

このトピックに関する別の記事を検討してください。何を達成したいのかを伝えるのは本当に難しいですが、この実装を出発点として使用できると思います。

于 2013-03-20T10:22:05.177 に答える
0

デリゲートは、C および C++ の関数ポインターに似た、メソッドを安全にカプセル化する型です。C 関数ポインターとは異なり、デリゲートはオブジェクトです

詳細については、 msdnを参照してください。

于 2013-03-20T10:23:30.277 に答える
0

これを実現するには、 Delegate.CreateDelegateオーバーロードの 1 つを使用できます。ただし、ターゲット オブジェクト (イベントが発生したときに呼び出されるメソッドを含むオブジェクト) を知る必要があります。

例 (疑似コード):

public void TextBox1_Validating(object sender, CancelEventArgs args)
{
    // handle the event
}


public void RegisterEvent()
{
    CancelEventHandler handler = (CancelEventHandler)Delegate.CreateDelegate(
        typeof(CancelEventHandler), 
        this,
        "TextBox1_Validating");
    textBox1.Validating += handler;
}

また、この MSDN の記事を読むこともできます。この記事では、他のいくつかの方法を示しています。方法: リフレクションを使用してデリゲートを接続する

于 2013-03-20T10:36:02.013 に答える