Frage von jundo324, 35

Csharp wie füge ich einer listBox1 Inhalt aus einer private static void zu?

Ich habe eine listBox1 in der möchte ich die Dateien ausgeben, welche in einer private static void gefunden werden. wenn ich einfach nur listBox1.Items.Add(variable) sagt er nur, das listBox1: Für das nicht statische Feld, die Methode oder die Eigenschaft "MainPage.listBox1" ist ein Objektverweis erforderlich.

Wie kann ich der listBox die inhalte aus der Variable hinzufügen?

Antwort
von edbca, 5

Soweit ich das verstanden habe, möchtest du - in einer (privaten) statischen Methode ohne Rückgabe (void) - einer nicht statischen ListBox etwas zuweisen.

Nehmen wir an, es gibt eine Klasse "Vektor". Ein Vektor hat bestimmte Eigenschaften, wie z.B. X, Y, Z, etc. Ein konkretes Objekt dieser Klasse hat dann Werte für diese Eigenschaften, z.B. X=1,Y=0,Z=0. Diese Werte können sich für jedes Objekt unterscheiden.

Zusätzlich hat die Klasse Methoden, z.B. double Länge(), welche die Länge für den Vektor ausrechnet. Diese Methode nimmt die Objekteigenschaften X,Y,Z und errechnet daraus den Wert. Diese Methode kann für unterschiedliche Objekte unterschiedliche Ergebnisse ausgeben, da die Eigenschaften unterschiedliche Werte haben können.

Statische Member (z.B. statische Methoden oder Variablen) sind Member, die nicht auf konkrete Objekte zugreifen können und müssen. Beispielsweise kannst du den Nullvektor als Eigenschaft statisch deklarieren. Es wäre ja sinnlos, wenn du einen Nullvektor haben willst und dazu erstmal ein Objekt erzeugen musst, z.B. so ((new Vector(0,1,2)).NullVector). Stattdessen geht das dann so: Vector.NullVector.

Statische Methoden sind ebenfalls für solche Dinge gedacht. Also für eine Berechnung, bei der es nicht erforderlich ist, Objekte der Klasse zu haben. Beispielsweise könnten wir eine Methode erstellen, die uns einen Vektor liefert, der (0,0,pZValue) ist, wobei pZValue per Parameter der Methode angepasst werden kann, z.B. Vector GetUpVector(pZValue); Logisch gesehen gehört so eine Funktion in die Vektorklasse, es ist aber halt nicht nötig, ein konkretes Objekt zu erstellen.

Damit C# erkennt, ob du jetzt etwas statisches hast oder nicht, ist das static Schlüsselwort da.

So. Soviel zu dem Sinn von static. Du hast nun eine statische Methode, in der du auf eine Variable zugreifen möchtest, die nicht statisch ist. Der Sinn ist aber, genau die nichtstatischen Member in einer statischen Methode nicht zu gebrauchen.

Möglich Lösung: du machst die statische Methode nichtstatisch. Die Methode lässt sich also nur verwenden, wenn du ein konkretes Objekt hast. Ich denke mal, dass das hier der sinnvollste Weg ist, aber da du keine genaue Erläuterung gebracht hast, warum du es statisch machst und auch keinen Quellcode gezeigt hast, kann ich auch falsch liegen.

Die Alternative ist: du übergibst der Methode eine Referenz auf das notwendige Objekt. D.h. bei obrigen Beispiel zur Länge würdest du einfach statisch so eine Methode verwenden: double Länge(Vector pVec) und dann auf pVec.X, usw. zugreifen. Wäre aber hier relativ sinnlos.

Ansonsten finden sich mit Google bei der Fehlermeldung viele Seiten, die dir auch helfen könnten.

Keine passende Antwort gefunden?

Fragen Sie die Community