Laden...

Panel => einmal dynamisch mit Controls befüllen und dann wiederverwenden

Erstellt von csharp_benutzer vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.447 Views
Thema geschlossen
C
csharp_benutzer Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren
Panel => einmal dynamisch mit Controls befüllen und dann wiederverwenden

Hallo,

ich habe ein WindowsForm, welches aus einem Panel besteht.
In dem Panel platziere ich meine Controls dynamisch.

Das Problem ist, dass bei jedem Aufruf von meinem Formular es genauso lange dauert, weil die Controls immer wieder dynamisch generiert werden.

Um an Geschwindigkeit zu gewinnen, würde ich gerne mein Panel beim Ersten Aufruf mit allen dynamisch erstellten Controls wegspeichern und beim nächsten Aufruf wieder als "fertiges" Control verwenden.

Panel und Controls sind aber leider nicht Serializable und Cloneable.

Würde mich auf Ihre Ideen sehr freuen.

M
171 Beiträge seit 2012
vor 10 Jahren

Dann lege doch nur eine Instanz von dem Form an und halte es Dir als Member, statt immer ein neues Form anzulegen.

C
csharp_benutzer Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Das Formular ist ein Bestandteil eines Moduls. Das heißt, dass beim Verlassen des Moduls wird die Instanz des Formulars zerstört.

Und ich möchte, dass beim nächsten Aufruf des Moduls ich die Controls in meinem Formular (bzw. im Panel) nicht wieder dynamisch erstellen muss.

F
10.010 Beiträge seit 2004
vor 10 Jahren

Das Anlegen von ein paar Controls in einem Panel dauert millisekunden, wenn nicht läuft da irgendwas auf deiner Seite falsch.

Also was Sind das für Controls und was machst du da wirklich?

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo csharp_benutzer,

wenn das Form zerstört ist, sind die Controls weg. Wenn man das Form später wieder anzeigen will, muss man die Controls (zur Laufzeit, also dynamisch) neu erzeugen. Da führt kein Weg daran vorbei. Selbst wenn das mit dem Serialisieren gehen würde (was es nicht tut), wäre das ja nur eine andere Art, die Controls dynamisch zu erzeugen. Würde also per se auch nicht schneller gehen.

Ich habe den gleichen Verdacht wie FZelle und empfehle dir einen Blick in [FAQ] Variablennamen zur Laufzeit zusammensetzen. Da geht es im zweiten Teil auch um das dynamische Erzeugen von Controls, den Grenzen des Ganzen und den Alternativen.

Bitte beachte vorsorglich auch [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

4.221 Beiträge seit 2005
vor 10 Jahren

Hallo Zusammen

Form-->Panel-->VieleControls

Vor dem Wegschmeissen des Forms machst Du ein Form.Controls.Remove(Panel).

Wenn Du ein neues Form brauchst, wieder Form.Controls.Add(Panel).

Das sind aber wirklich Grundlagen der allerersten Stunde....

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

C
csharp_benutzer Themenstarter:in
20 Beiträge seit 2013
vor 10 Jahren

Das Anlegen von ein paar Controls in einem Panel dauert millisekunden, wenn nicht läuft da irgendwas auf deiner Seite falsch.

Also was Sind das für Controls und was machst du da wirklich?

Es sind normale Text und Comboboxes.

wenn das Form zerstört ist, sind die Controls weg. Wenn man das Form später wieder anzeigen will, muss man die Controls (zur Laufzeit, also dynamisch) neu erzeugen. Da führt kein Weg daran vorbei. Selbst wenn das mit dem Serialisieren gehen würde (was es nicht tut), wäre das ja nur eine andere Art, die Controls dynamisch zu erzeugen. Würde also per se auch nicht schneller gehen.

Danke, ich denke auch, dass ich nicht darum herum komme. Ich muss halt mal schauen, welcher Vorgang verursacht die kleine Verzögerung.

Vor dem Wegschmeissen des Forms machst Du ein Form.Controls.Remove(Panel).

Wenn Du ein neues Form brauchst, wieder Form.Controls.Add(Panel).

Ich finde hier keinen Bezug zu meiner Frage. Die Form-Instanz existiert ja nach der Beendigung des Moduls nicht mehr. Vielleicht habe ich micht nicht verständlich genug ausgedrückt.

Danke an alle!

M
171 Beiträge seit 2012
vor 10 Jahren

Ich finde hier keinen Bezug zu meiner Frage. Die Form-Instanz existiert ja nach der Beendigung des Moduls nicht mehr. Vielleicht habe ich micht nicht verständlich genug ausgedrückt.

Warum sorgst Du nicht einfach dafür, dass die Form-Instanz weiter existiert ? Es zwingt Dich doch keiner, die Form zu zerstören, halte Dir die Instanz doch in einem Member.

Ich glaube auch, dass es hier an Grundlagen hapert...

4.221 Beiträge seit 2005
vor 10 Jahren

Ich finde hier keinen Bezug zu meiner Frage. Die Form-Instanz existiert ja nach der Beendigung des Moduls nicht mehr.

Ja die Form nicht... aber du könntest ja eine Ref auf das Panel halten und dieses später wiederverwenden...

Aber wenn Du das nicht vestehst, dann fehlt es wirklich an Grundlagen.

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo zusammen,

ob man die Instanz erhalten kann, hängt natürlich davon ab, ob wir hier über das mehrfache Anzeigen eines Forms zur Laufzeit des Programms reden oder über mehrere unabhängige Programmaufrufe. Da von Serialisieren die Rede war, habe ich auf letzteres getippt und deshalb bezog sich meine Aussage auf mehrere Programmaufrufe bzw. generell auf den Fall, dass die Instanz - aus welchen Gründen auch immer - unwiederbringlich zerstört wird.

Aber wie dem auch sei. Ich denke alles wesentliche ist gesagt. Und alles andere fällt dann tatsächlich unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen