Hey,
also zuerst einmal sollte man UI Logik nicht in die Zugirffsmodifikatoren (get- und set-Funktionen) schreiben, da gehören Validierungen und Logik, die die Variable betreffen, rein.
Zu deinem Problem:
Ich würde deine Materialien in eine eigene Klasse packen, damit du flexibler bist und nicht immer eine neue Variable für jeden Rohstoff anlegen musst. Ich habe das mal gemacht und die Klasse RawMaterial genannt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public class RawMaterial { public string Name { get; set; }
public int Amount { get; set; }
public RawMaterial(string name, int amount) { Name = name; Amount = amount; } } |
Die zwei Variablen
Name und
Amount sind sogenannte Eigenschaften. Name gibt einfach den Namen deines Rohstoffs an und Amount den Wert bzw die Menge des Rohstoffs.
In der Form habe ich eine ListView angelegt (um von den Labels wegzukommen), in der die Rohstoffe angezeigt werden. Im Code der Form habe ich dann eine Liste der Rohstoffe angelegt
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| private List<RawMaterial> materials = new List<RawMaterial> { new RawMaterial("Copper", 0), new RawMaterial("Cobalt", 0), new RawMaterial("Silicon", 0), new RawMaterial("Magnesium", 0), new RawMaterial("Stone", 0), new RawMaterial("Promethium", 0), new RawMaterial("Neodymium", 0), new RawMaterial("Sathium", 0), }; |
Um nun die Rohstoffe auf der Form anzuzeigen, musst du die ListView updaten. Ich habe dass mit einem Button gelöst:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| private void butCreateRandom_Click(object sender, EventArgs e) { foreach (RawMaterial material in materials) { material.Amount = random.Next(0, 10); } UpdateMaterialsListView(); }
private void UpdateMaterialsListView() { listViewMaterials.SuspendLayout(); listViewMaterials.Items.Clear(); foreach (RawMaterial material in materials) { if (material.Amount <= 0) continue; ListViewItem item = new ListViewItem(material.Name); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, material.Amount.ToString())); listViewMaterials.Items.Add(item); } listViewMaterials.ResumeLayout(true); } |
In meinem Fall werden den Rohstoffen einfach irgendwelche zufälligen Werte zugewiesen. Die Methode
UpdateMaterialsListView sorgt dann für das anzeigen der Rohstoffe.
In der foreach Schleife wird dann auch geprüft, ob ein Rohstoff überhaupt da ist (ob der
Amount größer 0 ist)
Ich habe das Beispielprojekt auch im Anhang wenn du es dir mal testen willst.
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler