Announcement

Collapse
No announcement yet.

Windows Form Fragen

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

  • Windows Form Fragen

    Hi,

    Bin in C# Anfänger und habe zwei Fragen:
    1) Ich möchte eine Anwendung schreiben, welche aus mehreren Forms besteht. Ich möchte nach einem Klick auf einem Button auf ein anderes Form wechseln. Das neue Form soll genau über dem anderen erscheinen bzw. dieses ersetzen. Das neue Form soll genauso groß wie das alte sein und genau an dessen Stelle plaziert werden.

    2) Ich erzeuge zwei Forms und habe Beide mit dem Designer gestaltet.

    static Form1 f1;
    static Form2 f2;

    static void Main()
    {
    f1 = new Form1();
    f2 = new Form2();
    Application.Run(f1);
    }

    Nun wechsle ich mit einem Button in Form 1 auf Form 2

    ////FORM 1////
    private void button1_Click(object sender, System.EventArgs e)
    {
    f2.Show();f2.
    }

    Jetzt möchte ich in Form 2 über einen Button zurück auf Form 1, da Form 1 aber f1 nicht kennt weiß ich nicht, wie ich dieses triviale Problem lösen kann.

    Ich hoffe, dass Ihr mir helfen könnt.

    Lg Lukas

  • #2
    Hallo,

    >..da Form 1 aber f1 nicht kennt ...

    dieser Zustand lässt sich schnell ändern, indem der Constructor eine Parameter erhält, der den Wert von <b>this</b> an die zweite Formular-Instanz übergibt. Das zweite Formular speichert diesen Zeiger auf das erste Formular in einem privaten Objektfeld:
    <pre>
    <b>private</b> Form1 ParentFrm;
    <br>
    <b>public</b> Form2(Form1 aParentFrm)
    {
    <font color="#003399"><i>//</i></font>
    <font color="#003399"><i>// Required for Windows Form Designer support</i></font>
    <font color="#003399"><i>//</i></font>
    InitializeComponent();
    <font color="#003399"><i>//</i></font>
    <font color="#003399"><i>// TODO: Add any constructor code after InitializeComponent call</i></font>
    <font color="#003399"><i>//</i></font>
    ParentFrm = aParentFrm;
    }
    </pre>
    Nach diesen Vorbereitungen kann das zweite Formular direkt auf das Erste zugreifen. Das folgende Beispiel ruft dazu eine öffentliche Methode des ersten Formulars auf:
    <pre>
    <b>private</b> <b>void</b> buttonReturn_Click(<b>object</b> sender, System.EventArgs e)
    {
    Close();
    ParentFrm.BringMeBack();
    }
    </pre>
    Zur Vervollständigung dienen dann die folgenden Programmzeilen im ersten Formular:
    <pre>
    <b>private</b> <b>void</b> buttonShowForm2_Click(<b>object</b> sender, System.EventArgs e)
    {
    Form2 aFrm2 = <b>new</b> Form2(<b>this</b>);
    aFrm2.Show();
    }
    <br>
    <b>public</b> <b>void</b> BringMeBack()
    {
    <b>this</b>.Show();
    MessageBox.Show(<font color="#9933CC">&quot;Ich bin zurück.&quot;</font>);
    }
    </pre>
    Wenn die Formulare statisch bleiben sollen, kann man eine dritte Hilfsklasse nutzen, in der die Formulare als Reaktion auf das <i>Activated</i>-Ereignis (oder ähnliches) den eigenen this-Wert in einem öffentlichen Objektfeld aberlegen. Solange beide Formular die gleiche statische Hilfsklasse einbinden, stehen so die Handles zur Verfügung.

    P.S: Wenn die öffentlichen Objekfelder in Properties verpackt werden, ist das selbstverständlich aus OOP-Sicht noch besser

    Comment

    Working...
    X