Entwickler-Ecke
Sonstiges (.NET) - Text Anzeige regeln
Tiborius - Mo 02.05.16 13:11
Titel: Text Anzeige regeln
Hi
Ich habe einen Rechner gebaut der verschiedene Rohstoffe ausgibt. Ich möchte aber das wenn Rohstoff_1 <=0 das der Text dann im Label nicht angezeigt wird.
Zur Zeit habe ich es für die bessere Übersicht jedes Rohstoff in ein eigenes Label gepackt und dann mit if abgefragt.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| if(iron <= 0) { lblAusgabe_1.Text = ""; } else { lblAusgabe_1.Text = iron + "\nIron"; } lblAusgabe_2.Text = copper + "\nCopper"; lblAusgabe_3.Text = cobalt + "\nCobalt"; lblAusgabe_4.Text = silicon + "\nSilicon"; lblAusgabe_5.Text = magnesium + "\nMagnesium"; lblAusgabe_6.Text = stone + "\nStone"; lblAusgabe_7.Text = promethium + "\nPromethium"; lblAusgabe_8.Text = neodymium + "\nNeodymium"; lblAusgabe_9.Text = sathium + "\nSathium"; lblAusgabe_10.Text = erestrum + "\nErestrum"; lblAusgabe_11.Text = zascosium + "\nZascosium"; |
Das Problem dabei, es rückt dann nicht nach Link wenn mal ein Rohstoff nicht angezeigt wird. Wenn ich jetzt alles in eine Label mache dann weiß ich nicht wie ich dann abfragen kann wie der Wert des Rohstoffes ist.
Falls es etwas hilft, hier auch mal die Berechnung der Rohstoffe von einem Bauteil.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| void HoverCargoBox() { try { UInt64 Variable = Convert.ToUInt64(txtHoverCargoBox.Text); } catch (FormatException) { txtHoverCargoBox.Text = "0"; } double wert = Convert.ToDouble(txtHoverCargoBox.Text); iron += wert * 5; cobalt += wert * 5; silicon += wert * 5; copper += wert * 5; } |
Gruß Tiborius
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am Mo 02.05.2016 um 15:37
erfahrener Neuling - Mo 02.05.16 13:31
Hi,
ich weiß nicht, ob ich das richtig verstanden hab. Willst du immer nur ein Label, mehrere nach Gruppen oder immer alle anzeigen?
Aufjedenfall kannst du doch einfach an der Stelle, wo sich ein Wert ändert, zB stone, einfach prüfen, ob der Wert größer 0 ist und wenn ja, das entsprechende Label anzeigen.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private int stone; public int Stone { get { return this.stone} set { this.stone = value; if (this.stone > 0) this.labelAusgabe_Stone = this.stone + "\nstone"; { } |
Was öffentliche Felder {get; set;} sind, weißt du ja bestimmt.
Gruß
Julian
Tiborius - Mo 02.05.16 13:45
Was get / set ist weiß ich leider noch nicht aber ich glaube ich habe eine Lösung gefunden. Ich werde berichten wie es gelaufen ist.
edit*
Ich habe es wahrscheinlich so umständlich wie möglich gemacht aber wenn man lernt ist man stolz das was funktioniert^^
Ich habe jetzt für jeden Rohstoff ein string erstellt. Der string bekommt dann den Wert des Rohstoffes und dann wird eine abfrage gemacht ob Wert <= 0 ist.
Dann werden alle strings in einem Lable ausgegeben.
so sieht das aus
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public string ironText; public string copperText;
ironText = iron + " Iron "; copperText = copper + " Copper";
if(iron <= 0) { ironText = ""; }
lblAusgabe_1.Text = ironText + copperText; |
C# - Mo 02.05.16 14:20
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!