2013-03-20 3 views
-4

У меня есть Delegate тип и function в формате строки. как я могу добавить , которые работают в delegate?Как добавить событие динамически по его названию

Datatable Events;

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

покажите свой код –

+2

Вы пытаетесь позвонить делегату? Или вы пытаетесь вызвать метод на объекте? Или, может быть, вы пытаетесь поднять мероприятие? Будьте более ясны ** точно **, что вам нужно, пожалуйста. –

+1

Вместо бесконечного попрошайничества пользователей для улучшения их неполных вопросов, я бы предложил просто закрыть их и сохранить мусорные вопросы на SO. Нетрудно найти резорбции, чтобы узнать, как задавать минимально достойные вопросы! постскриптум Вопрос о качестве заботится также о синтаксисе английского языка, поэтому «я», а не «я». Не ленитесь! – mloskot

ответ

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

+0

thnx Стефан, вы меня вытащили из моей проблемы. – AliasgerSW

2

Некоторые наивная реализация использовать другой уровень косвенности при вызове 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 по этой теме. Очень сложно сказать, чего вы хотите достичь, но я думаю, что вы можете использовать эту реализацию в качестве отправной точки.

0

Делегат - это тип, который надежно инкапсулирует метод, аналогичный указателю на функции в C и C++. В отличии от указателей функций C, делегаты являются объектом

для получения дополнительной информации вы можете обратиться msdn

Смежные вопросы