Hallo,
ich habe folgendes gemacht:
Das Problem ist, wenn ich die Bearbeitungsform wieder schließe und anschließen einen weiteren Doppelclick auf den DataGridView mache öffnet sich die Bearbeitungsform 2x, beim nächsten Mals dann 3x usw.
Der verwendete Code (im Button_Click, Grid_CellDoubleClick macht nur ein cmdEdit.PerformClick()) in der xControls.DLL:
string sTemp = "xClient." + m_sEditForm;
ObjectHandle obj = Activator.CreateInstance("xClient", sTemp);
IMyFormInterface IClass = (IMyFormInterface)obj.Unwrap();
IClass.RunForm(iId);
Laut Debugger wird bereits das cmdEdit.PerformClick mehrfach angesprungen, sofern ich vorher ein anderes Bearbeitungsfenster geschlossen habe (jeweils mittels this.Close() in einer [Schliesen]-Schaltflache.
Kann mir bitte jemand helfen, dieses Problem zu klären?
Danke und Gruß Henning
Warum benutzt du kein Dictionary in deiner Facory?
Kieken ob zu dem Typen schon eine Instanz angelegt wurde, ansonsten anlegen und ins Dctionary werfen.
Aber IMHO ist das für Forms ziemlich unnütz und riecht nach unüberlegtem "RADifiziertem" Design. 😉
ANdere Lösung. Bei den Klassen wo nur ein Object existieren soll das Singleton Pattern(siehe Design Pattern) anwenden. Dann kann es nur ein Objekt geben.
Falls du den Zugriff von mehreren Objekten unterbinden willst kannst dann noch eine Quasi Anmeldeliste im SingletonObject einbauen. Wo du entweder dann nach der Reihe die Zugriffe abarbeitest. oder sogar nur einenn einzigen Zugriff erlaubst.
😉
greetz TiTime
Danke für die Antworten!
Mein Ziel ist aber, dass die Benutzer mehrere Forms zum Bearbeiten geöffnet haben können.
Also z.B. bei Aufträgen: Eine Form mit der Liste der Aufträge und den dazugehörigen Positionen. Doppelclick in die Aufträge -> Bearbeiten des 'Auftragskopfes', dann Doppelclick in die Positionen -> Bearbeiten der Auftragsposition, weitere Doppelclick in die Positionen -> andere Auftagspositione bearbeiten usw. Bei Kunden-Adressen-Kontakten dasselbe aber als 1:n:m Beziehung.
Der Doppelclick in die 'oberste' Liste (also z.B. Auftragskopf) funktionert, auch mehrmals hintereinander. Nur bei den Auftragspositionen werden mehrere Forms erzeugt - je öffter ich dort Doppelclicke um so mehr Forms öffnen sich. Eigenartigerweise ist das Ganze nicht auf einen Speziellen Formulartyp beschränkt, d.h. z.B. 1. Doppelclick auf Position -> eine EditForm, 2. Doppelclick auf Position -> zwei neue EditForms (sofern die 1. vorher geschlssen wurde, Doppelclick auf Kopf -> eine EditForm für den Kopf, 3. Doppelclick auf Position -> sechs EditForms für Position usw.
[Zwischendurch tritt kein Fehler auf, so daß dieses Verhalten nicht durch nicht behandelte Exceptions hervorgerufen werden kann.]
[edit]
Wenn ich die z.B. die Form mit der Liste der Aufträge und Ihren Positionen zwischendurch Schließe, beginnt das 'Hochzählen' der Anzahl der Form wieder neu - ohne das ganze Programm neuzustarten.
[/edit]
Gruß Henning
@nils: Ich habe nur in CellDoubleClick:
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
cmdEdit.PerformClick();
und ButtonClick (s.o.) verwendet.
Es sieht so aus, als ob die 'Form-mit-den-Listen' beim Doppelclicken weis, wieviele EditForms für die Positionen geöffnet sein sollten -> und öffnet dann ausreichend viele.
Wenn ich nur die [Edit]-Schaltfläche verwende funktioniert es einwandfrei.
Gruß Henning