Laden...

Registriertes Event zur Laufzeit entfernen

Erstellt von Qt21580 vor 13 Jahren Letzter Beitrag vor 13 Jahren 700 Views
Q
Qt21580 Themenstarter:in
204 Beiträge seit 2005
vor 13 Jahren
Registriertes Event zur Laufzeit entfernen

Hi zusammen,

Ich stehe nun schon einige Zeit vor einem Problem das ich anscheinend nicht lösen kann.

Folgendes Szenario:
Ich habe mir einen UserAccount Manager gebastelt, mit diesem Manager möchte ich nun von all meinen Formularen Steuerelement Eigenschaften setzen das funzt auch soweit. Jetzt aber zu meinem Problem. Ich lade alle Steuerelemente von all meinen Formularen in eine TreeView mit


Activator.CreateInstance(Type()). 

Jetzt möchte ich aber zu den einzelnen Formularen eine Art Vorschau generieren denn unter txt_Opt_1 kann man sich wenig vorstellen was für ein Feld das ist. Jetzt muss ich aber nach dem CreateInstance Aufruf alle registrierten Events vom Formular und deren Steuerelementen löschen und das geht nicht. Mit


eventInfo.RemoveEventHandler(o, dynamicDelegate)

auf das Load Ereigniss vom Formular bezogen geschieht gar nichts.

Kann mir vlt. jemand helfen.

Danke.

360 Beiträge seit 2005
vor 13 Jahren

Hallo Qt21580,

das ganze sieht noch etwas unausgegoren aus. Ich habe da noch ein paar Fragen. Warum erstellst du eine neue Instanz von dem gewünschten Typ? Wo registrierst du dich auf die Events von denen du dich deregistrieren willst - bzw. welche Handler willst du deregistrieren?

Q
Qt21580 Themenstarter:in
204 Beiträge seit 2005
vor 13 Jahren
Events deregistrieren

Hallo Spontifixus,

ich habe zb.: das Formular Kunden. Im Formular ist ein Load Ereigniss registriert
zur Designzeit. Im Load Event werden einige Sachen zugewiesen wie DB Connection usw...

In meiner UserAccountManagerForm habe ich den User Max Mustermann definiert, der darf im Kundenformular alle Daten bearbeiten nur das Textfeld Kontonummer nicht.

Um das jetzt komfortabel bearbeiten zu können lade ich mir das Kundenformular (das ist eine Library -> AddIn) per Reflection in ein TreeView das heißt ich lade alle in der Library vorhandenen Forms und deren Controls in das TreeView. Wenn ich nun auf einen Formeintrag im TreeView Klicke möchte ich eine Art Vorschau von dem Formular erstellen. Das klappt auch soweit nur das in diesem Fall das Load Ereigniss gefeuert wird und dort einige Parameter nicht zugewiesen oder vorhanden sind und ich dadurch einen Fehler bekomme.

Ich möchte erreichen das per Reflection der Type geladen wird und alle Events die registriert sind deregistriert werden. Ich brauche das nur um die Steuerelemente zu visualisieren.

ich hoffe ich konnte das einigermaßen schieldern.

360 Beiträge seit 2005
vor 13 Jahren

Hallo Qt21580,

dann hatte ich dich richtig verstanden. Ein Formular auf diese Weise zu laden ist nicht unbedingt der beste Weg.
Du könntest dem Formular einen Konstruktor geben, der einen boolschen Parameter übernimmt anhand dem festestellt wird ob die EventHandler ausgeführt werden oder nicht. (Also eine Art "DesignMode")

Ich nehme an du baust die Applikation mit Windows-Forms? Dann schau dir mal das MVP (Model-View-Presenter) Pattern an. Wenn du die relevante Logik in einen Presenter auslagerst, kannst du den View (in dem Fall deine Form) je nach Anzeigegrund mit einen passenden Presenter anzeigen. Im Falle eines normalen Applikationsstarts ist das eben der der die Produktivdaten bereitstellt, im Falle des Rechteeditor tut er nichts außer die Form anzeigen und vielleicht Dummy-Daten bereitstellen.

Viele Grüße,
Markus 😃