Laden...

Windows Forms: Auslagerung Methode: Es werden mehrere Instanzen des Forms erzeugt

Erstellt von Farean vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.437 Views
Thema geschlossen
F
Farean Themenstarter:in
3 Beiträge seit 2013
vor 9 Jahren
Windows Forms: Auslagerung Methode: Es werden mehrere Instanzen des Forms erzeugt

Hallo,
ich weiß gerade nicht genau wie ich das machen soll.

Ich habe eine extra Klasse für einige Methoden erstellt.
Diese dient dazu etwas zu der Listbox in der Form hinzuzufügen und auch regelmäßig Überprüfungen durchzuführen.

Im Endeffekt funktioniert das auch, allerdings besteht im Moment das Problem dass sich die Form immer wieder öffnet, da diese Methode auch öfter aufgerufen wird.
Das liegt vermutlich daran, dass ich am Anfang der Methode ein Objekt der Form erstelle, um auf die Methode zugreifen zu können die dafür verantwortlich ist etwas in die Listbox zu schreiben.

Im Moment weiß ich nicht wirklich wie ich das lösen soll, bzw. wie es am geschicktesten wäre.

Vielleicht kann mir ja irgendwer einen Denkanstoß geben.

J
251 Beiträge seit 2012
vor 9 Jahren

Hey,
ohne explizit genau zu wissen, wie es derzeit umgesetzt hast, ist es schwer zu sagen, was man tun könnte.

Du hast eine Methoden-Klasse, die sich z.B. um die Verarbeitung der Listbox kümmert? Werden da einzig Daten geaddet und validiert?

Das liegt vermutlich daran, dass ich am Anfang der Methode ein Objekt der Form erstelle, um auf die Methode zugreifen zu können die dafür verantwortlich ist etwas in die Listbox zu schreiben.

I-wie klingt dies etwas wirr... Ich vermute, dass das Erstellen der Form eign. unnötig ist, wenn dein vorhaben sich auf eine Listbox und deren verhalten sich bezieht.

Ein bisschen Code könnte etwas Licht rein bringen über den Ist-Zustand und seinen Weg zum Soll-Zustand.

5.658 Beiträge seit 2006
vor 9 Jahren

Hi Farean,

man braucht keine neue Instanz der Form zu erstellen, um auf Controls einer vorhandene Form zuzugreifen. Verwende stattdessen lieber das this-Schlüsselwort. Ein Problem dabei wird sicherlich auch sein, daß bei dir eine gegenseitige Abhängigkeit zwischen deiner Form und der "extra Klasse" (deine Businesslogik?) besteht.

Bitte beachte in Zukunft [Hinweis] Wie poste ich richtig?, Punkt 1 und 5.

Zum Thema OOP und C# empfehle ich das OpenBook von Galileo und den Artikel [FAQ] Wie finde ich den Einstieg in C#?.

Christian

Weeks of programming can save you hours of planning

F
Farean Themenstarter:in
3 Beiträge seit 2013
vor 9 Jahren

Hallo,
danke erst einmal für die Antworten.
Ich habe mich wohl etwas falsch ausgedrückt, sorry.

Es gibt eine Form (Form1) und eine Klasse (Klasse1).
Das sind jetzt nur einmal Beispielnamen.

In Form1, gibt es eine Methode mit der eine vorhandene Listbox gefüllt werden soll, die Werte bekommt die Methode per Parameter der Klasse1 übergeben.

Mein Problem war dass sich die Form1 mehrmals aufgerufen hat, da ich in der Klasse1 jedes mal zu Beginn mit


Form1 form = new Form1();

gearbeitet hatte.

Wenn ich der Methode der Klasse1 die Form übergebe, funktioniert das auch, also so:


class Klasse1
{
  public void getValues(Form1 form)
  {
    //führe Berechnungen aus
    form.FillListbox("wert1", "wert2", "wert3");
  }
}

Der Code in der Form wäre dann z. B. so:


private void Button1_Click(object sender, EventArgs e)
{
  Klasse1 class = new Klasse1();
  class.getValues(this);
}

public void FillListbox(string value1, string value2, string value 3)
{
  //füge Daten zur Listbox hinzu

}

Ist das so in Ordnung, oder sollte man noch etwas beachten?

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo Farean,

dass du in dem Form ein Objekt der Klasse Klasse1 erzeugst, das dann wiederum eine Methode des Forms aufruft, ist keine gute Idee. Solche zyklischen Abhängigkeiten sollte man unbedingt vermeiden. Schau dazu auch mal in [FAQ] Kommunikation von 2 Forms (gilt genauso für Kommunikation von einem Form und einem anderen Objekt.

Außerdem sollte man Daten nicht per Add in eine ListBox füllen, sondern besser DataBindig verwenden.

Das können wir hier aber nicht abschließend behandeln. Bitte lies dich erstmal gründlich in die Windows Forms Programmierung ein. Passende Bücher findest du in Buchempfehlungen.

oder sollte man noch etwas beachten?

Das, was ich geschrieben habe und [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen