Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Panel => einmal dynamisch mit Controls befüllen und dann wiederverwenden
csharp_benutzer
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

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

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Mallett
myCSharp.de - Member



Dabei seit:
Beiträge: 171

beantworten | zitieren | melden

Dann lege doch nur eine Instanz von dem Form an und halte es Dir als Member, statt immer ein neues Form anzulegen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mallett am .
private Nachricht | Beiträge des Benutzers
csharp_benutzer
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.955

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
csharp_benutzer
myCSharp.de - Member



Dabei seit:
Beiträge: 20

Themenstarter:

beantworten | zitieren | melden

Zitat
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.
Zitat
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.
Zitat
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!
private Nachricht | Beiträge des Benutzers
Mallett
myCSharp.de - Member



Dabei seit:
Beiträge: 171

beantworten | zitieren | melden

Zitat
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...
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4.221
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat von csharp_benutzer
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...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers