C# 如何按事件名称动态添加事件

C# 如何按事件名称动态添加事件,c#,C#,我有字符串格式的委托类型和函数。我怎样才能补充呢 委托中的该函数 数据表事件 /* Having Records Control Events MethodName ControlName Validating Leave Enter TextBox1 Textbox1_Validating TextBox1_Leave -- */ foreach(DataRow Row in Events.Rows) { if (Row["

我有字符串格式的
委托
类型和
函数
。我怎样才能补充呢
委托中的该函数

数据表事件

/* 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
    }
}

一些简单的实现是在从lambda调用
MethodIndo
并将其分配给
Func
类型的委托实例时使用另一个间接级别。请注意,存在更复杂的委托转换:

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);
}

考虑关于这个话题的另一个问题。很难说您想要实现什么,但我认为您可以使用此实现作为起点

是一个安全封装方法的类型,类似于C和C++中的函数指针。与C函数指针不同,委托是对象

有关更多信息,请参阅

,您可以使用其中一个重载来实现这一点。但是您需要知道目标对象(对象,其中包含事件引发时要调用的方法)

示例(伪代码):


您也可以阅读这篇MSDN文章,其中介绍了其他一些方法:

显示您的代码,直到您试图调用代理为止?或者您正在尝试调用对象上的方法?或者你想举办一个活动?请更清楚地说明你到底需要什么。与其无休止地乞求用户改进他们不完整的问题,我建议你干脆关闭它们,保存垃圾问题等等。不难找到学习如何提出最低限度的体面问题的方法!p、 美国的质量问题也关注英语语法,所以“I”,而不是“I”。别偷懒!事实上,我有一个字符串形式的事件,比如“TextBox1\u Validating”,它也被声明了,但现在我想将这个方法添加到TextBox1.Validating运行时事件中。那么我如何才能在TextBox1.Validating事件中添加这个“TextBox1\u Validating”。@AliasgerSW:你的评论应该是问题的一部分。thnx Stephan,你帮我解决了问题。
event called with: value
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;
}