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