Hallo,
Du musst offensichtlich genau unterscheiden zwischen einer Klasse bzw. der Instanz einer Klasse, einer bestimmten Eigenschaft und dem Ergebnis einer bestimmten Methode.
rand repräsentiert eine Instanz der Klasse Random, steht also für "alles", was Du mit Random machen kannst.
Wenn Du die Klasse bzw. dieses Element an Label.Text übergeben willst, verlangt NET einen String. Diesen bekommt es automatisch durch
rand.ToString(). Diese Standardmethode, die es bei allen Klassen gibt, "gibt einen String zurück, der das aktuelle Objekt darstellt". Sofern die NET-Entwickler keinen Grund oder keine Möglichkeit haben, besondere Informationen darin einzubinden, gibt es als Ergebnis nur den Klassennamen.
Den nächsten/aktuellen Zufallswert bekommst Du (wie Du es ja auch machst) durch Aufruf der
Next-Methode. Wenn Du diesen Wert mehrfach verwenden willst, musst Du ihn lediglich in einer eigenen Variablen zwischenspeichern. Beispiel:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| int next = rand.Next(1, 7); if (next == 1) { label1.Text = "Richtig"; } else { label1.Text = "Falsch"; label2.Text = next.ToString(); } |
Du musst bei NET und C# ganz genau auf die verwendeten Typen achten. Automatische Konvertierungen wie "label2.Text = rand" gibt es selten, und sie führen (wie hier gesehen) oft nicht zum gewünschten Ergebnis. Also Augen auf mit den Typen!
Außerdem schreit Dein Code geradezu nach
Vereinfachung: 6 Buttons mit identischem Arbeitsablauf können und sollten problemlos mit einheitlichem Code verarbeitet werden.
Vorarbeit: Jeder Button bekommt eine Markierung; das gehört in den Konstruktor hinter InitializeComponents():
C#-Quelltext
1: 2:
| Button1.Tag = 1; Button2.Tag = 2; |
Alle Buttons bekommen denselben EventHandler zugewiesen; das geht auch über den Designer oder durch manuelle Änderung in der Designer.cs:
C#-Quelltext
1:
| ButtonX.Click += ButtonsClick; |
Dann gibt es eine einheitliche Prüfung (die Zusatzprüfungen werden nur der Vollständigkeit halber vorgenommen):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| private void ButtonsClick(object sender, EventArgs e) { if (sender is Button && (sender as Button).Tag != null) { int tag = (int)(sender as Button).Tag; int next = rand.Next(1, 7); label1.Text = next == tag ? "Richtig" : "Falsch"; if (next != tag) label2.Text = next.ToString(); } } |
(Anstelle von Tag könnte auch der Button-Name ausgewertet werden, aber der könnte geändert werden - Namen wie Button1 ff. sollten normalerweise sowieso verboten werden; aber dann bräuchte man noch eine Konvertierung char -> int; da ist die Tag-Lösung schöner.)
Viel Erfolg! Jürgen
@Christian
Da schreibe ich seit einer Viertelstunde an meinen Erläuterungen, und Du kommst mit der eigentlichen Lösung dazwischen.
| BIOS-Crasher hat folgendes geschrieben: |
| Hier der Code ( sorry wegen der größe): |
Du hättest doch selbst merken können, dass Du denselben Code 6x zitierst; das hättest Du auch weglassen können.