2012-04-13 2 views
1

Я просто узнаю о событиях, делегатах и ​​подписчиках. Я провел последние 2 дня, исследуя и обертывая свой мозг вокруг всего этого. Я не могу получить доступ к информации, передаваемой в моем значении EventArgs e. У меня есть сохраненный проект, который хочет открыть. Состояние необходимых форм десериализуется в словаре. Возникает цикл, который повышает значение UnpackRequest, передавая ему ключ/значение.не удалось получить доступ к значению EventArgs e для использования в HandleRequest

ProjectManager.cs файл:

public delegate void EventHandler<TArgs>(object sender, TArgs args) where TArgs : EventArgs; 
public event EventHandler<UnpackEventArgs> UnpackRequest; 

Тогда дальше вниз:

ProjectManager.cs файл:

//Raise a UnpackEvent //took out virtual 
protected void RaiseUnpackRequest(string key, object value) 
{ 
    if (UnpackRequest != null) //something has been added to the list? 
    { 
     UnpackEventArgs e = new UnpackEventArgs(key, value); 
     UnpackRequest(this, e); 
    } 
} 

Затем в рамках открытого метода, после того, как словарь получает заселена с состояниями каждого Форма:

ProjectManager.cs файл:

foreach (var pair in dictPackState) { 
    string _key = pair.Key; 
    dictUnpackedState[_key] = dictPackState[_key]; 
    RaiseUnpackRequest(pair.Key, pair.Value); //raises the event. 
    } 

У меня есть класс для события:

public class UnpackEventArgs : EventArgs 
{ 
    private string strKey; 
    private object objValue; 

    public UnpackEventArgs(string key, object value) 
    { 
     this.strKey = key; 
     this.objValue = value; 
    } 
    //Public property to read the key/value ..and get them out 
    public string Key 
    { 
     get { return strKey; } 
    } 
    public object Value 
    { 
     get { return objValue; } 
    } 
} 

Я все еще работаю над кодом, чтобы добавить абонентов и как компоненты проекта получают вновь образованный в отдельных формах. Но часть, над которой я сейчас пытаюсь работать, находится в MainForm.cs, где я обрабатываю Unpacked Request, используя полученные аргументы. Мой e содержит значения ключей, а ключ представляет, куда отправить значение (которое является объектом формы).

private void HandleUnpackRequest(object sender, EventArgs e) 
{ 
    //reflection happens here. turn key into object 
    //why can't i get e.key ??? 
    object holder = e; //holder = VBTools.UnpackEventArgs key... value...all info 

    //object goToUnpack = (e.key).GetType(); 
    //goToUnpack.unpackState(e.value); 
} 

Я думаю, что я включил в себя все необходимые детали, чтобы получить помощь ?! БЛАГОДАРЯ!

ответ

6

Изменить это:

private void HandleUnpackRequest(object sender, EventArgs e) 

Для этого:

private void HandleUnpackRequest(object sender, UnpackEventArgs e) 

Вспомни объявление обработчика событий:

public event EventHandler<UnpackEventArgs> UnpackRequest; 
+0

Спасибо так много !! Вот так! –

+0

Прохладный. Отметьте его как «Ответ». – AlfredBr