Entwickler-Ecke

Sonstiges (.NET) - Von einer Methode aus, auf listBox1 zugreifen


Ccenter - Mi 21.07.10 19:14
Titel: Von einer Methode aus, auf listBox1 zugreifen
Hallo,
ich habe gerade ein Problem und zwar möchte ich auf eine listBox1 zugreifen.
Das gelingt mir aber nicht innerhalb einer selbst geschriebenen Methode.

Beispiel:

C#-Quelltext
1:
2:
3:
4:
public static void test()
{
      listBox1.items.add("test");
}


Fehlermeldung:
Für das nicht statische Feld, die Methode oder die Eigenschaft ist ein Objektverweis erforderlich.

Wie füge ich denn jetzt den Objektverweis hinzu?


Christian S. - Mi 21.07.10 19:23

Du hast die Methode als static deklariert. Die Listbox ist ja aber ein nicht-statisches Feld der Form. Also einfach die Methode nicht statisch deklarieren und schon sollte das passen :-)


Ccenter - Mi 21.07.10 20:05

Ok vielen dank =)


Ccenter - Do 29.07.10 18:00

Ok, jetzt bin ich leider auf das static angewiesen.
Ich habe nun versucht das Problem so zu lösen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
private void Form1_Load(object sender, EventArgs e)
{
    testMethode();
}
public static void testMethode()
{
    Form1 frm = new Form1();
    frm.textBox1.Text = "test";
}


Ich bekomme keine Fehlermeldung aber leider passiert auch sonst nichts.
Fehlt da noch irgendwas oder ist das der falsche Weg?


Christian S. - Do 29.07.10 18:15

Wieso bist Du auf static angewiesen?

Was Du da machst, kann auch nicht funktionieren. Du erstellst ja eine neue Instanz der Form und änderst an der etwas. An der ersten Instanz der Form tut das gar nichts.


Ccenter - Do 29.07.10 18:40

Ok.
Ich verwende gerade die ManagedWinapi und hab dort einen EventHandler für einen bestimmten Hotkey eingerichtet.
Und die daraus entstandene Methode setzt static voraus.


Christian S. - Do 29.07.10 18:41

Kannst Du das mal zeigen? Ich habe die ManagedWinApi auch schon benutzt, aber dass ich da mit statischen Methoden arbeiten musste, daran kann ich mich nicht erinnern :gruebel:


Yogu - Do 29.07.10 18:49

Falls es tatsächlich mal nötig sein sollte, aus einer statischen Methode auf die Instanz des Hauptformulars zugreifen, kann man sich mit einem kleinen Trick behelfen. Er ist aber nicht unbedingt schön, weil er fehlschlägt, sobald mehrere Instanzen des Formulars erstellt werden müssen:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
class MyForm : Form {
  private static MyForm instance;

  public MyForm() {
    /* ... */
    instance = this;
  }

  public MyForm Instance { get { return instance; } }
}

Probier aber vorher lieber aus, ob es nicht doch irgendwie mit einer nichtstatischen Methode geht.