Autor Beitrag
-CrimeTime-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: So 21.11.10 22:15 
Hallo,
ich habe das Problem das meine Funktion statisch ist und ich leider nicht weiss wie ich die listView1 statisch mache, dazu kommt noch das Problem das ich zwei verschiedene Werte habe "String, Int"

hier mein bisheriger Code:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
                int[] myItems = new int[] 
     
                {
                    GetName(i), // das ist ein String
                    GetCount(i),
                    GetLevel(i),
                    GetMinBid(i),
                    GetMinIncrement(i),
                    GetBuyoutPrice(i),
                    GetBidAmmount(i),
                    GetOwner(i) // das ist ein String
                };
                ListViewItem lvi = new ListViewItem(myItems);
                listView1.Items.Add(lvi); //listView1 ist rot Markiert weil es nicht Statisch ist!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 21.11.10 22:20 
Umgekehrt, du musst nicht die ListView unabhängig von einer Objektinstanz (statisch eben) machen, sondern auf die konkrete ListView einer konkreten Formularinstanz zugreifen.

Du musst also die Variable, in der dein Formular liegt, benutzen.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: So 21.11.10 22:21 
das ist ja die listView1, oder habe ich das nun Falsch verstanden?

Edit:
so sieht der Fehler aus:
An object reference is required for the non-static field, method, or property 'Project1.frm1.listView1'
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 21.11.10 22:31 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du musst also die Variable, in der dein Formular liegt, benutzen.

Vor allem muss erstmal eine Variable für das Formular existieren.

Du musst dir das ganze so vorstellen: Form1 ist eine Klasse, die allgemein beschreibt, wie solche Formulare aussehen und sich verhalten sollen. Und das Ding, was du siehst, ist eine Instanz dieser Klasse. Es könnte noch viele weitere Instanzen von Form1 geben.

Das heißt, es ist nicht ganz eindeutig, welches Formular du meinst, wenn du die Instanz selbst nicht kennst. Woher soll deine statische Methode denn wissen, welche sie verwenden soll? Also musst du in einer statischen Variable die Referenz auf die Forminstanz festhalten. Zum Beispiel könnte man das zuerst erstellte Formular verwenden. Dafür musst du im Konstruktor prüfen, ob die Variable schon gesetzt wurde, und wenn nicht, sie mit this füllen.

Wenn irgendein Wort unklar ist, bitte Fragen :)
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: So 21.11.10 22:34 
ha wenn blos eins wort davon für mich klar gewesen wäre :D
also ich denke du meinst die Definition aus der .Designer.cs (private System.Windows.Forms.ListView listView1;)
aber wenn ich diese Static mache, bekomme ich ein haufen von Fehler.

Edit: was auch noch glaube Interessant zu Wissen ist, das sich dieser Code der oben im ersten Post sich in der From befindet wo auch die listView1 ist.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 21.11.10 23:32 
Dann hast du die Methode, die den Code enthält, anscheinend als static markiert. Und das macht keinen Sinn, mach's weg ;) .

_________________
>λ=
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: So 21.11.10 23:40 
kann ich nicht weg machen das gibt über 20 Fehlermeldungen.
hier die Function Definition.
ausblenden Quelltext
1:
public static List<Item> GetList()					
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 21.11.10 23:52 
Um die Begrifflichkeiten nochmal zu klären: Klassen kannst du in C# mit dem Schlüsselwort class deklarieren. Sie enthalten Eigenschaften, Methoden usw. Von einer Klasse kann man eine Instanz erstellen, das ist dann ein Objekt (man kann die beiden Begriffe eigentlich synonym verwenden). Eine Klasse wäre z.B. ein Stempel, die Instanzen wären Abdrücke, die man mit ihm erstellen kann.

Eine Referenz ist vereinfacht gesagt eine Variable, über die man auf ein Objekt zugreifen kann.

Um zurück zum Thema zu kommen:

Soll die Methode überhaupt statisch sein? Das entscheidet man eigentlich nicht darüber, welche Option wie viele Fehler verursacht, sondern indem man überlegt, was sinnvoll ist:

  • Eine nicht-statische Methode gehört zu einem Objekt, in deinem Fall zum Formular. Sie führt eine Aktion durch, die den Status des Formulars ändert, oder gibt Auskunft über den Status des Objekts.
  • Eine statische Methode gehört allgemein zu allen Objekten dieser Klasse. Sie ermöglicht es, mit allen Objekten zu kommunizieren, oder ist einfach nur ein kleines Helferchen, das in Zusammenhang mit der Klasse gebraucht wird.

In einer Formularklasse sind normalerweise die meisten Methoden nicht statisch, da sie meistens direkt auf das Formular zugreifen müssen.

Was macht denn die Methode GetList eigentlich?

Ich schätze, von den 20 Fehlermeldungen bedeuten einige, dass auf die Methode zugegriffen wurde, ohne ein Objekt anzugeben. Das lässt sich recht einfach beheben: Stelle jedem, der auf die Methode zugreifen muss, eine Referenz auf das Formular (via this) bereit.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 22.11.10 00:00 
danke für die Detailreiche Aufklärung Yogu, die hatte ich mal nötig g*

also die Funktion ist nun so:
ausblenden Quelltext
1:
public List<Item> GetList()					


scheint alles gut zu laufen bis auf dieser Fehler:
Argument 1: cannot convert from 'int[]' to 'System.Windows.Forms.ListViewGroup'

in dieser Code Zeile:
ausblenden Quelltext
1:
ListViewItem lvi = new ListViewItem(myItemsInt); // alles nach dem = ist unterstrichen.					


ich denke das Problem ist weiterhin, das den text bzw. die Zahlen die ich in der ListView darstellen will Int und String sind.
gibt es sowas wie eine Vollständige verweisung wo er den Text oder die Zahl reinpacken soll?

z.B.
ausblenden Quelltext
1:
2:
listView1.ItemGetName.Add(GetName(i)) // für den String
listView1.ItemGetCount.Add(GetCount(i)) // für den Int Wert


weil dann würde ich auch das Problem mit der int liste umgehen(siehe erster post)

Edit:
Zitat:
Was macht denn die Methode GetList eigentlich?

also GetList ist dafür zuständing die Daten zusammeln die in die ListView kommen bzw. Angezeigt werden sollten.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.11.10 00:06 
user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
ich denke das Problem ist weiterhin, das den text bzw. die Zahlen die ich in der ListView darstellen will Int und String sind.

Denk ich auch. Du musst also irgendwie alle Einträge in strings umwandeln:

ausblenden C#-Quelltext
1:
2:
3:
string[] stringValues = new string[myItemsInt.Length];
for (int i = 0; i < stringValues.Length; i++)
  stringValues[i] = myItemsInt[i].ToString();



user profile icon-CrimeTime- hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
Was macht denn die Methode GetList eigentlich?

also GetList ist dafür zuständ die Daten zusammeln die in die ListView kommen.

Hört sich stark nach nicht-statischer Methode an.

Edit: Fehler im Code behoben (siehe Hervorhebung)


Zuletzt bearbeitet von Yogu am Mo 22.11.10 00:17, insgesamt 1-mal bearbeitet
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 22.11.10 00:15 
also irgendwas mache ich Falsch mit deinem Code.

hier wie ich ihn Benutze:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
                int[] myItemsInt = new int[] 
     
                {
                    GetName(i), //rot unterstrichen Fehelermeldung: Cannot implicitly convert type 'string' to 'int'
                    GetCount(i),
                    GetLevel(i),
                    GetMinBid(i),
                    GetMinIncrement(i),
                    GetBuyoutPrice(i),
                    GetBidAmmount(i),
                    GetOwner(i) //rot unterstrichen Fehelermeldung: Cannot implicitly convert type 'string' to 'int'
                };

                string[] stringValues = new string[myItemsInt.Length];
                for (int u = 0; u < stringValues.Length; i++)
                    stringValues[i] = myItemsInt[u]; //myItemsInt rot unterstrichen mit dieser Fehlermeldung:Cannot implicitly convert type 'int' to 'string'
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.11.10 00:17 
Schau dir zur Umwandlung einmal TryParse an. ;-)
msdn.microsoft.com/e....int32.tryparse.aspx
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.11.10 00:20 
Erstmal muss ich mich entschuldigen; ich habe in aller Eile den wichtigsten Teil meines Codes vergessen: ToString().

Allerdings ist das alles doch gar nicht nötig! Die Fehlermeldungen gibt es nur deshalb, weil du versuchst, Strings in einem Integer-Array (myItemsInt) zu speichern. Warum erstellst du dann überhaupt ein Integer-Array? Wenn du myItemsInt nicht als int[], sondern als string deklarierst, kannst du das dem Konstruktor von ListViewItem direkt übergeben. Natürlich müssen dann aber die ganzen Integer-Werte in Strings umgewandelt werden. Das kannst du ganz einfach mit der Methode ToString machen.
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 22.11.10 00:24 
Also wenn ich es so mache:

ausblenden Quelltext
1:
GetCount(i).ToString,					


erhalte ich diese Fehlermeldung: Cannot convert method group 'ToString' to non-delegate type 'string'. Did you intend to invoke the method?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 22.11.10 00:28 
Du hast die Klammern vergessen ;)
-CrimeTime- Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55



BeitragVerfasst: Mo 22.11.10 00:50 
danke Funktioniert 1A, habe aber da noch eine Frage, ich lese ja mit dem Wert GetMinBid(i) eine Zahl aus, diese ist 4 ställig kann ich das was ich dort erhalte abtrennen? z.b. das die zahl nicht 3089 ist sonder 30 89?