我有
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
}
}
答案 0 :(得分:2)
一些天真的实现是在从lambda调用MethodIndo
时使用另一级间接,并将其分配给类型为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
考虑关于此主题的另一个articles。很难说出你想要实现的目标,但我认为你可以将这个实现作为一个起点。
答案 1 :(得分:0)
委托是一种安全封装方法的类型,类似于C和C ++中的函数指针。与C函数指针不同,委托是对象
有关详细信息,请参阅msdn
答案 2 :(得分:0)
您可以使用其中一个Delegate.CreateDelegate重载来实现此目的。但是你需要知道目标对象(对象,它包含你想要在事件引发时调用的方法)
示例(伪代码):
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文章,其中介绍了其他一些方法:How to: Hook Up a Delegate Using Reflection