C# Button soll ersetzen und nicht ergänzen

alex_00

Cadet 2nd Year
Registriert
Dez. 2016
Beiträge
31
Hallo,

und zwar ist im Moment ein weiteres Problem bei meinem Spielplan aufgetaucht. Ich war soweit, dass in eine Tabelle 3 Punkte für Mannschaft 1 eingetragen wurden, wenn der Inhalt der textBox1 größer war als der in textBox2 (Das gleiche logischerweise auch für Unentschieden und Sieg für die andere Mannschaft). Die alles war durch einen Klick auf einen Button ausführbar. Jetzt mein Problem: Wenn ich das Ergebnis ändern möchte und daraus beispielsweise ein Unentschieden mache, dann wird nochmal 1 Punkt addiert, ohne dass die drei Punkte davor verschwunden sind. In der Tabelle stehen also 4 Punkte, obwohl das Team erst ein Spiel (Unentschieden) gespielt hat. Als Ausweich hatte ich, dass der Button nach einer Eingabe verschwindet, sodass man das Ergebnis gar nicht mehr ändern kann. Allerdings kann dies auch nicht die Lösung sein, vor allem weil man das Programm nur wieder schließen und aufrufen muss, um den Button erneut zu benutzen. Hat jemand eine Lösung/einen Lösungsanatz für mein Problem? Wäre sehr nett! Danke im Vorraus:)
 
Bitte... Absätze und Code statt viel Text ;)

Ist dann einfacher zu helfen. Wir wissen ja nichtmal wie du das gemacht hast, nur was passiert.

//Edit
Achso, jetzt hab ichs verstanden. Du könntest das lösen, in dem du vorher überprüfst, wie das Ergebnis war, die Punkte dann abziehst und dann die neue Punkteverteilung ausrechnest und das dann wieder addierst. Aber dafür müsstest du halt speichern, was für ein Wert vorher drinstand... Ist vllt. für den Anfang etwas schwierig.
 
Zuletzt bearbeitet:
Bitte Screenshot einfügen,
oder ne Skizze.
Einfachste Lösung nach jedem ändern alles neu berechnen.
 
C# Forum.PNG

Hier habe ich zuerst 2:1 für die Heimmannschaft eingegeben, auf den Button geklickt, auf 1:1 geändert und wieder draufgeklickt. In der Tabelle wurde beides addiert, ich möchte aber, dass es ersetzt wird.
Hier der Quellcode für den Button-Click:


private void button1_Click(object sender, EventArgs e)
{
int Zahl1 = Convert.ToInt32(textBox1.Text);
int Zahl2 = Convert.ToInt32(textBox2.Text);



if (Zahl1 > Zahl2)
{
int Zahl1000 = Convert.ToInt32(label218.Text);
int Zahl2000 = Zahl1000 + 3;
label218.Text = Convert.ToString(Zahl2000);
}

if (Zahl1 == Zahl2)
{
int Zahl1000 = Convert.ToInt32(label218.Text);
int Zahl2000 = Zahl1000 + 1;
label218.Text = Convert.ToString(Zahl2000);
int Zahl1001 = Convert.ToInt32(label222.Text);
int Zahl2001 = Zahl1001 + 1;
label222.Text = Convert.ToString(Zahl2001);
}

if (Zahl1 < Zahl2)
{
int Zahl1001 = Convert.ToInt32(label222.Text);
int Zahl2001 = Zahl1001 + 3;
label222.Text = Convert.ToString(Zahl2001);
}
 
Verstehe ich nicht, du hast doch extra programmiert, dass das addiert wird (umwandeln des labels in int, dann wird addiert).
Vielleicht wäre dir das aber auch aufgefallen, wenn du aussagekräftige Variablennamen gewählt hättest. Fang also erstmal an alle Texboxen, lables und auch die Integer mit vernünftigen Namen zu versehen.

Dann wird dir vielleicht auffallen, dass da etwas weiter gedacht werden muss. Ich würde es so machen, ohne viel ändern zu müssen:
Die Methode oben wird so umgestaltet, dass sie beliebige Felder berechnen kann, also die verwendeten Textboxen und Lables zu Parametern der Methode machen.

Dann eine "Berechnungsmethode":
Nur die wird aufgerufen, wenn neu berechnet werden soll. Ablauf:
- Zurücksetzen der Ergebnistabelle
- Wiederholtes Aufrufen der anderen Methode mit den einzelnen Textboxen und Lables

Das ganze hätte man auch sehr schön objektorientiert umsetzen können, aber ich schätze das führt jetzt zu weit.
 
Zurück
Oben