Entwickler-Ecke

WinForms - Objecte Löschen


bd.cole - Mi 22.08.07 10:10
Titel: Objecte Löschen
Hallo Man kann ja Objecte wie z.b. Picturebox zur Laufzeit ganz eifnach erstellen. Kann man die auch zur Laufzeit wieder löschen. Mit der Entf Taste? Find da nirgends was


Kha - Mi 22.08.07 11:51

Du entfernst den sender-Parameter des Eventhandlers aus der Controls-Collection des Parents, fertig. Dispose kannst du auch noch gleich aufrufen.


JüTho - Mi 22.08.07 12:56

Hallo,

ich wollte meine Antwort schon länger abschicken, hatte aber Probleme mit der Forums-Datenbank. Da ich sie ausführlicher geschrieben hatte als Khabarakh, schicke ich sie, obwohl sie im Ergebnis nicht mehr vorschlägt als er.

Zur Laufzeit "ganz einfach" erstellen? Nun ja, mit soviel Code wie erforderlich...

Zur Laufzeit löschen "mit der Entf-Taste"? So einfach natürlich nicht; dafür ist (wie beim Erstellen) entsprechend viel Code erforderlich. Insbesondere musst Du feststellen, welches Control gelöscht werden soll.

Arbeitsanleitung zum Beispiel so:
  1. Im Formular muss KeyPreview = true gesetzt werden.
  2. Du musst das Ereignis KeyDown oder KeyUp nutzen, um das Drücken der Entf-Taste zu erhalten.
  3. In diesem Ereignis dürfte der Sender das aktuelle Control angeben; es könnte aber auch sein, dass Du mit ActiveControl arbeiten willst oder die aktuelle Maus-Position umrechnen musst. Auf jeden Fall musst Du auf diese Weise herausfinden, welches Control zu löschen ist.
  4. Dann musst Du den Parent des Controls bestimmen und es aus dessen Auflistung löschen:

    C#-Quelltext
    1:
    2:
    3:
    4:
    5:
    Control required = ... //  welches Du vorher bestimmt hast
    if (required.Parent != null) {
        required.Parent.Controls.Remove(required);
        required.Dispose();
    }

    Anstelle des Parent kann auch mit dem Formular gearbeitet werden - je nach Situation.

Viel Erfolg! Jürgen

PS. Ohne Gewähr - ich hatte es nur so hingeschrieben.