Guten Abend,
Ich habe Daten aus einer XML Datei gelesen und in ein Array gepackt.
Die XML sah wie folgt aus:
<texture>
<name>Block 1</name>
<description>Das ist Block 1</description>
</texture>
<texture>
<name>Block 2</name>
<description>Das ist Block 2</description>
</texture>
Im Array sieht das nun wie folgt aus:
Array[0] = Block 1 (Name)
Array[1] = Das ist Block 1 (Description)
Array[2] = Block 2 (Name)
Array[3] = Das ist Block 2 (Description)
Nun habe ich ein Panel erstellt was nur Name und Description anzeigen soll.
Allerdings macht er kein Panel mit:
Name: Block 1
Description: Das ist Block 1.
Sondern er macht
Name. Block 1
Description: Block 1
usw.....
Irgendwas muss in meiner For-Schleife falsch sein, und ich weiß nicht wie ich das richtig machen soll.
TexturesOut hXML = new TexturesOut();
string[] myarr = hXML.test().ToArray();
int laenge = hXML.test().Length;
for(int i = 0; i < laenge; i++)
{
Panel pan = new Panel();
pan.Name = "paneltest" + i;
pan.Size = new Size(239, 73);
this.Controls.Add(pan);
for(int j = 0; j < 2; j++)
{
Label LblName = new Label();
LblName.Name = "lblname" + j;
LblName.Text = myarr[i];
LblName.AutoSize = true;
LblName.Location = new Point(73, 3);
LblName.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
LblName.Size = new System.Drawing.Size(39, 13);
this.Controls.Add(LblName);
pan.Controls.Add(LblName);
Label Description = new Label();
Description.Name = "lbldesc" + j;
Description.Text = myarr[i];
Description.Location = new Point(73, 21);
Description.AutoSize = true;
this.Controls.Add(Description);
pan.Controls.Add(Description);
}
flowLayoutPanel1.Controls.Add(pan);
So war jetzt meine idee dahinter. Allerdings funktioniert das nicht, ich weiß auch wieso, aber ich weiß nicht, wie ich das Problem lösen kann.
Hoffentlich kann mir hier jemand helfen.
LblName.Text = myarr[i];
// ...
Description.Text = myarr[i];
Fällt dir was auf?
Und wie in deinem anderem Thema XML Array als Rückgabewert und 3 Schichten Frage von MrSparkle schon angesprochen solltest du eine Datenklasse anlegen, z.B.
class Texture
{
public string Name { get; set; }
public string Description { get; set; }
}
Und dann davon eine Liste (oder Array) anlegen:
List<Texture> textures;
Dann kommst du auch nicht mit den Indizes beim Zugriff darauf durcheinander.
PS: Die erste Zeile bei
this.Controls.Add(LblName);
pan.Controls.Add(LblName);
ist überflüssig, da ein Control nur zu einem Container hinzugefügt werden kann (immer genau einen Parent hat), d.h. die 2. Zeile überschreibt wieder die Auswirkung der 1. Zeile.
Das Ding ist, dass ich, wenn ich die Liste ausgeben muss sie auch mit einer for-schleife ausgeben muss.
Das heißt, dass das Problem dann doch immer noch da ist.
Edit:
Und wie in deinem anderem Thema
> von MrSparkle schon angesprochen solltest du eine Datenklasse anlegen, z.B.class Texture { public string Name { get; set; } public string Description { get; set; } }
Verstehe ich nicht so ganz.
Ich habe da eine Liste angelegt:
public string[] ReadTextureFromXml()
{
XDocument textures = XDocument.Load(@"C:\Users\Kevin\Documents\Visual Studio 2015\Projects\Minecraft Customizer\Minecraft Customizer\textures\textures.xml");
List<string> textureList = new List<string>();
foreach (var texture in textures.Descendants("texture"))
{
textureList.Add(texture.Element("name").Value);
textureList.Add(texture.Element("description").Value);
}
string[] array = textureList.ToArray();
return array;
Sie dann als ein Array übergeben.
Verstehe ich nicht so ganz.
Genau da liegt das Problem. Deswegen wurde dir ja auch schon mehrmals der Tip gegeben, dich erstmal mit den Grundlagen zu beschäftigen. Wenn man nicht weiß, wie man mit Listen oder Klassen umgeht, und sich auch noch nicht mit Objektorientierter Programmierung beschäftigt hat, dann hat es auch keinen Zweck, eine Anwendung nach dem Drei-Schichten-Modell zu erstellen.
Daher nochmal der Hinweis auf [FAQ] Wie finde ich den Einstieg in C#? und das OpenBook vom Rheinwerk-Verlag: 🛈
Weeks of programming can save you hours of planning
Das lese ich ja. Ich bin jetzt bei Methoden und Parametern und so n kram. Das mit den Listen kam noch gar nicht.
Das kommt davon wenn man nie gelernt hat wie man Grundlagen erlernt.
Hör erst mal auf mit dem gefrickel und lies das Buch bis zum Schluss einmal durch.
Du musst dabei bei weitem nicht alles verstehen, aber wenn du dann beim zweiten Durchlauf
anfängst die Sachen auszuprobieren, hast du die anderen Grundlagen ( wie eben klassen und co ) schon erlesen.
Glaube uns endlich das erst Grundlagen erlesen deutlich weniger Frust bedeutet und dann auch deutlich schneller geht.
Also ich finde schon das es sinn macht das angelesene in kleineren Programmen zu testen, denn sonst wird man sehr sehr schnell die Lust verlieren.
In der Schule hast du ja auch nicht das Alphabet von A - Z gelesen und erst dann angefangen deine ersten Wörter zu schreiben. Das ist ein fließender Prozess, wie das Programmieren auch. Erst wenn man Fehler macht lernt man wirklich dazu.
Wenn du der Typ dafür bist empfehle ich dir von Rheinwerk das Videotraining zu verwenden kostet zwar knapp 40 Euro aber so hast du einen guten und Praxisorientierten Einstieg.
Oder was auch etwas spezieller aber sehr gut ist sind die Bücher Schrödinger Programmiert.
In der Schule hast du ja auch nicht das Alphabet von A - Z gelesen und erst dann angefangen deine ersten Wörter zu schreiben. Das ist ein fließender Prozess, wie das Programmieren auch. Erst wenn man Fehler macht lernt man wirklich dazu.
Du hast also mit Grammatik angefangen bevor du schreiben konntest?
99% des Frusts entsteht dadurch das man zu viele Fehler macht und dadurch überhaupt nichts versteht.
Nach über 30 Jahren in dem Job und wirklich hunderten von einsteigenden Kollegen kann ich dir sagen das deine Herangehensweise die langsamere und frustrierendere ist.
Aber es ist eure Zeit und eure Lust.
In der Schule hast du ja auch nicht das Alphabet von A - Z gelesen und erst dann angefangen deine ersten Wörter zu schreiben. Das ist ein fließender Prozess, wie das Programmieren auch. Erst wenn man Fehler macht lernt man wirklich dazu.
Du hast also mit Grammatik angefangen bevor du schreiben konntest?){gray}
Du lernst die Grammatik wie die Syntax einer Sprache durch das praktische Anwenden und nicht nur durch das theoretische lernen.
Wäre es so einfach, müsste man ja im Grunde nur ein Fachbuch lesen und schon hat man alles intus was man benötigt.
Anschauen, nachmachen und verstehen. Und ja Fehler machen gehört dazu.
Stichwort Didaktische Prinzipien durch Anwenden des gelernten, verstehen und festigen.