[Aktuelles Script]
<gameDatenbank>
<Games>
<spielName>Test1</spielName>
<spielIcon>BILD</spielIcon>
<spielBanner>BILD</spielBanner>
<Dateigröße>20 GB</Dateigröße>
<spielVersion>0.0.0.1</spielVersion>
<spielPlattform
name="Steam"
/>
<spielAddons
Addon1 = ""
Addon2 = ""
Addon3 = ""/>
<spielMods
Mod1 =""
Mod2 =""
Mod3 =""/>
<spielErweiterungen
Erweiterung1=""
Erweiterung2=""
Erweiterung3=""
/>
</Games>
<Games>
<spielName>Test2</spielName>
<spielIcon>BILD</spielIcon>
<spielBanner>BILD</spielBanner>
<Dateigröße>20 GB</Dateigröße>
<spielVersion>0.0.0.1</spielVersion>
<spielPlattform
name="Steam"
/>
<spielAddons
Addon1 = ""
Addon2 = ""
Addon3 = ""/>
<spielMods
Mod1 =""
Mod2 =""
Mod3 =""/>
<spielErweiterungen
Erweiterung1=""
Erweiterung2=""
Erweiterung3=""
/>
</Games>
</gameDatenbank>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
using System.Net;
namespace WindowsFormsApp2
{
public partial class newgame : UserControl
{
private static newgame _instance;
public static newgame Instance
{
get
{
if (_instance == null)
_instance = new newgame();
return _instance;
}
}
public string plattform = "Steam";
public newgame()
{
InitializeComponent();
}
private void newgame_Load(object sender, EventArgs e)
{
// Kategorien Plattforms
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
var gameNameQuery = from game in gameDatenbank.Descendants("Games")
select game.Element("spielName").Value;
foreach (string gameName in gameNameQuery)
{
//listBox1.Items.Add(name.Element("spielName").Value);
Panel panel = new Panel();
panel.BackColor = SystemColors.ButtonFace;
panel.Location = new Point(18, 12);
panel.Name = "panel1";
panel.Size = new Size(200, 138);
panel.TabIndex = 0;
panel.BackColor = Color.Aqua;
panel.BorderStyle = BorderStyle.Fixed3D;
Label label = new Label();
label.Location = new Point(0, 15);
label.Text = (gameName);
label.Size = new Size(35, 13);
label.AutoSize = true;
label.TextAlign = ContentAlignment.MiddleRight;
Button button = new Button();
button.Location = new Point(62, 112);
button.Text = "Button Test";
button.Size = new Size(75, 23);
button.UseVisualStyleBackColor = true;
flowLayoutPanel1.Controls.Add(panel);
panel.Controls.Add(label);
panel.Controls.Add(button);
}
}
private void gameBackgroundBanner_Click(object sender, EventArgs e)
{
}
public void test()
{
}
}
}
Hallo Forum
Ich habe da ein kleines problem.
Ich möchte mir gerne einen eigenen kleinen server Browser schreiben
die daten dazu speicher ich mir in einer xml datei ab.
jetzt möchte ich jedoch das sich pro eintrag ein panel erstellt und wie genau ich das hinbekomme weiß ich nicht.
<gameDatenbank>
<Game>
<spielName>Fortnite</spielName>
<spielIcon>BILD</spielIcon>
<spielBanner>BILD</spielBanner>
<Dateigröße>20 GB</Dateigröße>
<spielVersion>0.0.0.1</spielVersion>
<spielPlattform
name="Steam"
/>
<spielAddons
Addon1 = ""
Addon2 = ""
Addon3 = ""/>
<spielMods
Mod1 =""
Mod2 =""
Mod3 =""/>
<spielErweiterungen
Erweiterung1=""
Erweiterung2=""
Erweiterung3=""
/>
</Game>
</gameDatenbank>
diese befindet sich auf einem webserver.
könntet ihr mir da villeicht helfen. ?
das ganze soll in etwa so aussehen.
Siehe Anhang
danke.
Daten speichern und Dinge anzeigen sind zwei unabhängige Dinge.
[Artikel] Drei-Schichten-Architektur
wie genau ich das hinbekomme weiß ich nicht.
Was hast Du probiert? Wo kommst Du nicht weiter?
Im Endeffekt:
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich Poste mal mein code.
Wie ich jetzt datein auslesen und einzelne panels hinzufügen kann habe ich verstanden. jedoch nicht wie ich die Panels so anordnen kann wie im ersten beispiel bild.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
namespace WindowsFormsApp2
{
public partial class newgame : UserControl
{
private static newgame _instance;
public static newgame Instance
{
get
{
if (_instance == null)
_instance = new newgame();
return _instance;
}
}
public string plattform = "Steam";
public newgame()
{
InitializeComponent();
}
private void newgame_Load(object sender, EventArgs e)
{
// Nach Kategorien Soltieren
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
var gameName = from game in gameDatenbank.Descendants("Game")
where game.Element("spielPlattform").Attribute("name").Value == plattform
select game;
foreach (var name in gameName)
{
Label label = new Label();
label.Location = new Point(10, 10);
label.Text = (name.Element("spielName").Value);
label.Size = new Size(200, 30);
FlowLayoutPanel dynamicPanel = new FlowLayoutPanel();
dynamicPanel.Location = new Point(26, 12);
dynamicPanel.Name = "Panel1";
dynamicPanel.Size = new Size(200, 50);
dynamicPanel.BackColor = Color.LightBlue;
dynamicPanel.BorderStyle = BorderStyle.Fixed3D;
dynamicPanel.Dock = DockStyle.Top;
dynamicPanel.AutoSize = false;
Button button = new Button();
button.Location = new Point(10, 50);
button.Text = "Test Button";
button.Size = new Size(200, 30);
dynamicPanel.Controls.Add(label);
dynamicPanel.Controls.Add(button);
Controls.Add(dynamicPanel);
}
}
}
}
bei mir sieht das ganze jetzt so aus.
ich habe
dynamicPanel.Dock = DockStyle.Top;
dazugeschreiben weil man leider sonst nur 1 Panel sieht
Du legst für jedes Element bisher ein eigenes FlowLayoutPanel
an - möchtest du nicht eher nur genau eins haben und dadrin dann die SubPanels anlegen?
Hallo Th69
Genau das war mein Plan 😃
danke dafür ich war wohl gestern nacht nicht mehr auf der höhe xD
jetzt funktioniert es.
Entschuldigung für diesen doppel post jedoch habe ich noch eine abschließende frage.
private void newgame_Load(object sender, EventArgs e)
{
// Kategorien Plattforms
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
var gameNameQuery = from game in gameDatenbank.Descendants("Games")
select game.Element("gameName").Value;
string _gameName = gameNameQuery.ToString();
label1.Text = _gameName;
wie bekomme ich das in einen string mit dem richtigen inhalt covertiert ?
denn wenn ich es so mache erhalte ich im label nur dies
System.Linq.Enumerable+WhereSelectnumerablelterator'2[Systeam.Xml.Linq.XElement.System.String]
bzw. wie kann ich in meiner foreach mehrere strings verpacken ?
sodass ich zb die labels ( gameName , gameBanner, gameServerAdresse usw. ) mit dem inhalt verknüpfen kann.
// Kategorien Plattforms
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
var gameNameQuery = from game in gameDatenbank.Descendants("Games")
select game.Element("spielName").Value;
foreach (string gameName in gameNameQuery)
{
//listBox1.Items.Add(name.Element("spielName").Value);
Panel panel = new Panel();
panel.BackColor = SystemColors.ButtonFace;
panel.Location = new Point(18, 12);
panel.Name = "panel1";
panel.Size = new Size(200, 138);
panel.TabIndex = 0;
panel.BackColor = Color.Aqua;
panel.BorderStyle = BorderStyle.Fixed3D;
Label label = new Label();
label.Location = new Point(0, 15);
label.Text = (gameName);
label.Size = new Size(35, 13);
label.AutoSize = true;
label.TextAlign = ContentAlignment.MiddleRight;
Button button = new Button();
button.Location = new Point(62, 112);
button.Text = "Button Test";
button.Size = new Size(75, 23);
button.UseVisualStyleBackColor = true;
flowLayoutPanel1.Controls.Add(panel);
panel.Controls.Add(label);
panel.Controls.Add(button);
}
Ist der Schnipsel aus dem ersten Post noch ein gültiges Beispiel eines Game-Knotens? Da gibt es weder „spielname“ noch „gameName“.
Entferne das select aus deiner Linq-Abfrage und werte die einzelnen Game-Knoten in der foreach-Schleife aus.
Hallo Jompikumpi und danke für deinen Hinweis.
Ich werde denn ersten Beitrag mal Aktualisieren damit, das auf dem Aktuellen stand ist.
Ich habe leider nicht mehr so weit gedacht.
Sollte in Descendants nicht „Game“ statt „Games“ stehen?
Ja sollte es hab ich warscheinlich vergessen abzuändern 😉
aber irgendwie bekomme ich es nicht hin so wie du es geschreiben hast. meintest du es so ?
ich habe in diese richtig kein peil 😛
List<string> Games = new List<string>()
{
"spielName","Dateigröße"
};
IEnumerable<string> enumerable()
{
foreach(string _games in Games)
{
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
var gameNameQuery = from game in gameDatenbank.Descendants("Games")
}
yield break;
}
Ein Schleifendurchlauf pro Game-Knoten.
Falls dich nur ein bestimmter Spielename interessiert, dann filtere einfach.
XDocument gameDatenbank = XDocument.Load(@"C:\Users\toxic\source\repos\WindowsFormsApp2\gameDatenbank.xml");
foreach (var game in gameDatenbank.Descendants("Game"))
{
// Auswertung der verschiedenen Elemente des Game-Knotens
}
vielen lieben dank 😃
Ich glaube jetzt habe auch ich das verstanden 😉
und Vielen Dank für deine code lösung jedoch warum schreibst du var und nicht string ?
ich habe das var jetzt in string umbenant damit ich die labels.text füllen kann 😃
warum schreibst du var und nicht string ?
Wenn du mehr als nur den Spielenamen brauchst, wirst du meine Lösung bevorzugen. 😉
var ist implizit und gilt als Syntaktischer Zucker; hat nichts mit Funktionalität oder inhaltlicher Bevorzugung zutun.
var (C# Reference)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code