Weder .Items noch .SelectedIndexChanged bei Listbox vorhanden!?
-
Hey,
Hier ist ein Screenshot von der GUI, das erklärt alles:
http://www.abload.de/image.php?img=unbenannth38d.png
Leider kann man keinen Screenshot von der IntelliSence machen, die verschwindet immer vorher. Soll ich alle Einträge aus der IntelliSence aufschreiben?
Hier ist der Hauptcode: (alles in InitalizeComponent ist eigentlich unwichtig)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Kampf_Simulator { public partial class Form1 : Form { public Form1() { InitializeComponent(); //Team 1 //Schwertkämpfer Einheiten Schwertkämpfer = new Einheiten() { Name = "Schwertkämpfer", Team = 1, Lebenspunkte = 100, Angriffsstärke = 50, Rüstungsstärke = 50 }; Einheiten Pikenier = new Einheiten() { Name = "Pikenier", Team = 1, Lebenspunkte = 100, Angriffsstärke = 35, Rüstungsstärke = 55 }; //Team 2 //Bogenschütze Einheiten Bogenschütze = new Einheiten() { Name = "Bogenschütze", Team = 2, Lebenspunkte = 100, Angriffsstärke = 40, Rüstungsstärke = 50 }; Einheiten Reiter = new Einheiten() { Name = "Reiter", Team = 2, Lebenspunkte = 100, Angriffsstärke = 55, Rüstungsstärke = 40 }; //Listbox Team1 listBoxTeam1.Items.Add(Schwertkämpfer.ToString()); listBoxTeam1.Items.Add(Pikenier.ToString(); //Listbox Team2 listBoxTeam2.Items.Add(Bogenschütze.ToString()); listBoxTeam2.Items.Add(Reiter.ToString()); } //Hauptprogramm public void EigAktualisieren { labelEigenschaften_Team1.Text = "Lebenspunkte: " + listBoxTeam1.Se //hier gibt es kein . SelectedIndexChanged oder .Items !? } } }
-
Hast du die ganze Sache schonmal kompiliert?
Ich meine ohne deine "EigAktualisieren" Methode?Ehrlich gesagt hab ich die Art und Weise wie du deine "Einheiten" Objekte mit Werten bestückst noch nie gesehen.
Die Inellisense Zeigt dir was an?
Hätte fast darauf getippt dass sie aufgrund vorheriger fehler nicht aufpoppt.Aber vielleicht irre ich mich auch und die Wertzuweisung wird so angenommen, in dem Fall hätte ich wieder was gelernt. (Wie sieht da der c'tor aus?)
mfg
Saschaps: In InitializeComponent() solltest du auch nichts ändern/zusätzlich rein schreiben. Das ist vom Designer erzeugter Code und sollte in der Regel nicht angefasst werden.
-
Sascha schrieb:
Ehrlich gesagt hab ich die Art und Weise wie du deine "Einheiten" Objekte mit Werten bestückst noch nie gesehen.
Willkommen in der schönen Welt von .net 3.5
-
Jockelx schrieb:
Sascha schrieb:
Ehrlich gesagt hab ich die Art und Weise wie du deine "Einheiten" Objekte mit Werten bestückst noch nie gesehen.
Willkommen in der schönen Welt von .net 3.5
Genauer gesagt Visual Studio 2008. So kann man auch in .Net 2.0 Programmieren, ebenso Anonyme Klassen, Lambda-Asudrücken etc. (mit einem kleiner Trick auch mit Linq-Enumerable & Queryable).
-
Hinter "EigAktualisieren" fehlen die Runden Klammern!
-
Ohne die Methode EigAktualisieren läuft das Programm ohne Fehler.
Bleibt nur die Frage, warum die Listboxen nicht richtig funktionieren?
(Ist es wirklich so, dass in InitializeComponent kein weiterer Code mehr reingeschrieben werden sollte? Ich dachte da soll alles rein, was zu Beginn des Programms halt erstellt werden soll!?)
-
Sascha schrieb:
Hinter "EigAktualisieren" fehlen die Runden Klammern!
richtig
und genau aus diesem grund wird intellisense dir nicht alles zeigen
intellisense macht hin und wieder probleme sobald im code vorher etwas nicht stimmt, und du hast den rumpf von "EigAktualisieren" nicht richtig
dh der code tuts nicht - er wird vermutlich ein get oder set erwarten da es ohne die () wie ein property aussieht (obwohl nichtmal das wegen dem void)(Ist es wirklich so, dass in InitializeComponent kein weiterer Code mehr reingeschrieben werden sollte? Ich dachte da soll alles rein, was zu Beginn des Programms halt erstellt werden soll!?)
schreib da nichts rein
was zu beginn von dir erstellt werden soll gehoert in den ctor danach - direkt in die InitializeComponent rein kommt nichts - das wird sonst alles (irgendwann) ueberschrieben
-
Ich verstehe es echt nicht, ich habe jetzt den Code aus InitalizeComponent in die Ctor kopiert und jetzt gibt es bei den Listboxen Fehler:
//Listbox Team1 listBoxTeam1.Items.Add(Schwertkämpfer.ToString()); listBoxTeam1.Items.Add(Pikenier.ToString()); //Listbox Team2 listBoxTeam2.Items.Add(Bogenschütze.ToString()); listBoxTeam2.Items.Add(Reiter.ToString());
Und zwar immer hinter .Add und hinter .ToString gibt es die Fehler *Ungültiges Token "(" in Klasse, Struktur oder Schnittstellenmemberdeklaration.
*Irgendwas scheint mit den Listboxen nicht in Ordnung zu sein.
-
Du hast es an die falsche Stelle kopiert.
-
Rhombicosidodecahedron schrieb:
Du hast es an die falsche Stelle kopiert.
Was gibt es denn da noch für "andere Stellen", wo der Code richtig aufgehoben ist?
-
Aus der Fehlermeldung lässt sich schließen, dass du den Code NICHT in den Ctor kopiert hast bzw. dort nicht an die richtige Stelle (nach
InitializeComponent();
).
-
Entweder hast du eine schießende geschweifte Klammer vorher mitkopiert oder zwischen zwei Funktion kopiert (was aus ersterem resultierert). Der Copiler denkt dein kopierter Code ist in deiner Klasse direkt drin und nicht in einer Funktion.
So:
public void Form1() //ctor : Ja, das ist der Konstruktor! { InitializeComponent(); listBoxTeam1.Items.Add(Schwertkämpfer); /* Kleiner Tipp am Rande - du brauchst keine ".ToString"-Methode: denn ListBox.Items können auch Objekte enthalten. So kannst du dann einfacher bzw. direkt über SelectedItems auf die Objekte zugreifen; Die ListBox selbst benutzt diese Methode um den Text des jeweligen Elements zu bestimmen. */ listBoxTeam1.Items.Add(Pikenier); //Listbox Team2 listBoxTeam2.Items.Add(Bogenschütze); listBoxTeam2.Items.Add(Reiter); }
EDIT: Zeilenumbruch im Kommentar und bessere Formulierung
-
Rhombicosidodecahedron schrieb:
Entweder hast du eine schießende geschweifte Klammer vorher mitkopiert oder zwischen zwei Funktion kopiert (was aus ersterem resultierert). Der Copiler denkt dein kopierter Code ist in deiner Klasse direkt drin und nicht in einer Funktion.
So:
public void Form1() //ctor { InitializeComponent(); listBoxTeam1.Items.Add(Schwertkämpfer); /*Kleiner Tipp am rande - du brauchst kein ToString: denn ListBox.Items können Objecte enthalten. So kannst du dann direkt über SelectedItems auf die Objecte zugreifen und nicht nur die String; die Listbox items werden selbst ja auch nur über Object.ToString() "vertextet" */ listBoxTeam1.Items.Add(Pikenier); //Listbox Team2 listBoxTeam2.Items.Add(Bogenschütze); listBoxTeam2.Items.Add(Reiter); }
Ich dachte in InitalizeComponent darf kein weiterer Code mehr rein!?
-
Bitte den Post darüber löschen, ich glaube es wird Zeit, schlafen zu gehen...
-
Also das war der Fehler:
Ich dachte, dass dieser ganze Block
public void Form1() //ctor { <----- InitializeComponent(); ----> }
zu InitalizeComponent gehört und nicht nur die runden Klammern. Und weil man ja in InitalizeComponent keinen Code mehr schreiben darf, habe ich den Code und diese geschweifte Klammer geschrieben.
Sorry, sowas wird nicht wieder vorkommen.
-
du redest viel ueber "runde klammern" - "geschweifte klammern" und auch dein ".XYZ ist nicht da" klingt alles sehr verdaechtig nach fehlenden programmierkentnissen #gg
soll kein vorwurf sein, faellt mir nur auf