2012-04-13 8 views
1

Ich lerne gerade über Ereignisse, Delegierte und Abonnenten. Ich habe die letzten zwei Tage damit verbracht, mein Gehirn zu erforschen und einzuwickeln. Ich kann nicht auf die Informationen zugreifen, die in meinem EventArgs-Wert übergeben werden. Ich habe ein gespeichertes Projekt, das geöffnet werden möchte. Der Zustand der notwendigen Formulare wird in ein Wörterbuch deserialisiert. Eine Schleife wird ausgelöst, die den UnpackRequest auslöst und den Schlüssel/Wert mitgibt.nicht auf EventArgs e-Wert zugreifen können, um in HandleRequest zu verwenden

ProjectManager.cs Datei:

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

Dann weiter nach unten:

ProjectManager.cs Datei:

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

Dann innerhalb der offenen Methode, nach Wörterbuch wird mit den Staaten jeder bevölkerten Formular:

ProjectManager.cs-Datei:

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

Ich habe eine Klasse für die Veranstaltung:

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

Ich bin immer noch auf dem Code arbeiten Abonnenten und wie die Projektkomponenten hinzuzufügen, erhalten in den einzelnen Formen wieder aufgebaut. Aber der Teil, an dem ich gerade arbeite, befindet sich in der MainForm.cs, wo ich die Unpacked-Anfrage behandle, indem ich die Argumente durchführe. My e enthält die Schlüsselwerte und der Schlüssel stellt dar, wohin der Wert gesendet werden soll (welches das Formularobjekt ist).

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

Ich denke, ich habe alle notwendigen Teile enthalten, um Hilfe zu bekommen ?! VIELEN DANK!

Antwort

6

ändern diese:

private void HandleUnpackRequest(object sender, EventArgs e) 

Um dies:

private void HandleUnpackRequest(object sender, UnpackEventArgs e) 

Denken Sie daran, Ihre Event-Handler-Deklaration:

public event EventHandler<UnpackEventArgs> UnpackRequest; 
+0

Thank you so much !! Das hat es geschafft! –

+0

Kühl. Markieren Sie es als "Beantwortet". – AlfredBr