Announcement

Collapse
No announcement yet.

this.Close() aus anderen Klassen?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • this.Close() aus anderen Klassen?

    Wie kann ich mein WindowForm Programm aus einer anderen Klasse schließen?
    In der gleichen Klasse funktioniert es ja über this.Close();

    Danke

    EDIT: kann ich einfach Application.Exit() nutzen oder gibt es hier Nachteile?
    Zuletzt editiert von tatoosh; 04.12.2008, 16:46.

  • #2
    Hallo,

    aus objekt orientiertet Sicht sollte eine andere Klasse nicht eine andere (hier: die Form) schließen dürfen.

    Es gibt aber mehrere Möglichkeiten:
    • erstell in der Form eine öffentliche Methode welche die Form schließt -> kann von der anderen Klasse aufgerufen werden
    • Application.Exit(): weist die Nachrichtenschleife sich zu beenden wenn keine Nachricht ansteht -> geht nur wenn die Nachrichtenschleife bereits gestartet ist, d.h. wenn die Form angezeigt wird
    • Environment.Exit(<ExitCode>) beendet die Anwendung und gibt an das OS den ExitCode zurück -> ist aber schon eine etwas brutale Methode, da das Ende sofort eintritt
    • Thread.CurrentThread.Abort() beendet den aktuellen Thread -> wenn dies der "Hauptthread" der Anwendung ist wird auch diese beendet. Es wird auch der Code "zum Aufräumen" durchlaufen
    • dann gäbe es noch Methoden die den Prozess killen -> sehr brutal


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Recht herzlichen Dank, mal wieder, Gü.

      Wenn ich eine public Methode verwende, wie du es in Punkt 1 Vorschlägst, könnte es gut funktionieren. Muss ich dann zuerst ein Objekt der Main Klasse erzeugen oder erübrigt sich das, weil die Methode öffentlich ist?

      Comment


      • #4
        Da die Methode zum Schließen zur Instanz der Form gehört muss dieses Objekt vorhanden sein. Was ist bei dir Main?

        Du könntest es auch noch etwas verbessern indem zB Schnittstellen verwendet werden.

        Beispiel:

        IInterface1. Definiert die Methode Schließen. Somit kann über die Schnittstelle jede Klasse angesprochen werden die diese implementiert - hat Vorteile bei mehreren Formularen die "Ferngeschlossen" werden sollen.
        [highlight=c#]
        namespace WindowsFormsApplication1
        {
        interface IInterface1
        {
        void Schließen();
        }
        }
        [/highlight]

        Form2. Die Form die erstellt und "Ferngeschlossen" werden soll. Implementiert die Schnittstelle.
        [highlight=c#]
        using System.Windows.Forms;

        namespace WindowsFormsApplication1
        {
        public partial class Form2 : Form, IInterface1
        {
        public Form2()
        {
        InitializeComponent();
        }

        void IInterface1.Schließen()
        {
        this.Close();
        }
        }
        }
        [/highlight]

        Form1. Steuer das Ganze.
        [highlight=c#]
        using System.Windows.Forms;

        namespace WindowsFormsApplication1
        {
        public partial class Form1 : Form
        {
        private IInterface1 _form;

        public Form1()
        {
        InitializeComponent();
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
        Form2 form2 = new Form2();
        _form = form2;
        form2.Show();
        }

        private void button2_Click(object sender, System.EventArgs e)
        {
        _form.Schließen();
        }
        }
        }
        [/highlight]

        Kann noch verbessert werden bzw. sinnvolle Namen verwendet werden.
        Hier wäre die Verwendung einer Schnittstelle nicht notwendig da form2.Schließen() aufgerufen werden könnte, sofern die Methode Schließen in Form2 definiert ist.
        Der Vorteil der Schnittstelle ist dass der Aufruf _form.Schließen() auch für Form3, Form4,... funktioniert - vorausgesetzt diese Implementieren die Schnittstelle.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hey Gü,

          hatte leider noch keine Zeit deine Vorschläge umzusetzten. Werde ich mir noch genau anschauen. Dank dir!

          Comment

          Working...
          X