Random Wort, Random Colorfont und Fontsize verbinden
-
Hallo,
ich bin neu hier und programmiere seit 1 Jahr in der Schule C#. In den Ferien habe ich mich an einige Programme gewagt (Taschenrechner mit tausenden von Funktionen, usw). Nun wollte ich ein Spiel programmieren, welches später vom Design so aussieht.
http://www7.pic-upload.de/04.09.11/ow2n8jo7u69a.jpg
Soweit so gut. Durch Drücken auf den Play Button erfolgt nun dies:
http://www7.pic-upload.de/04.09.11/2dharezcmxc.jpg
Label1.Text verändert sich in ein Random Wort ausgelöst durch diesen Code:
string[] strCollection = { "blau", "braun", "gelb", "lila", "orange", "pink", "rot", "grau", "grün" }; System.Random rnd = new Random(); label1.Text = strCollection[rnd.Next(strCollection.Length)];
So, nun wollte ich, dass diesem Random Wort eine Random Color zugeordnet wird.
{ private static Random randomSeed = new Random(); public static System.Drawing.Color RandomColor() { return System.Drawing.Color.FromArgb(randomSeed.Next(256), randomSeed.Next(256), randomSeed.Next(256)); } }
eingefügt in die Klasse farben.cs sollte eine random color hervorrufen.
im quelltext vom Programm aufgerufen durch:
Color Background = farben.RandomColor();
So nun meine Frage(n), wie kriege ich das Label1 dazu, ein Random Wort mit einer Random Color, einer Festen Fonzsize (welche aber eine andere als der Text "Waiting for Play" sein soll) und einer anderen Location (Platzierung) wiederzugeben?
hoffe jemand kann mir helfen.
mit freundlichen Grüßen
-
Ich versteh die Frage nicht.
Hat die irgendetwas mit dem ganzen Rest zu tun? Könntest du etwas genauer erläutern, was du tatsächlich machen möchtest?Grüssli
-
Ich versteh die Frage auch nicht ganz, aber um dem label einen Font eine Position und einen neuen Back or ForeColer zuzuweisen kannste es ja mal so probieren:
System.Random rnd = new Random(); label1.Text = strCollection[rnd.Next(strCollection.Length)]; label1.BackColor = Color.Red; // Hier halt auf deine aktuelle Farbe aus deiner Collection prüfen FontFamily myFontFamily = new FontFamily("Arial"); Font myFont = new System.Drawing.Font(myFontFamily, 20, FontStyle.Bold, GraphicsUnit.Pixel); label1.Font = myFont;
mfg.
-
c#´ler schrieb:
System.Random rnd = new Random(); label1.Text = strCollection[rnd.Next(strCollection.Length)]; label1.BackColor = Color.Red; // Hier halt auf deine aktuelle Farbe aus deiner Collection prüfen FontFamily myFontFamily = new FontFamily("Arial"); Font myFont = new System.Drawing.Font(myFontFamily, 20, FontStyle.Bold, GraphicsUnit.Pixel); label1.Font = myFont;
klappt danke!
nun bräuchte ich nurnoch einen Timer. Im Programm unten links ist ein numericupdown eingebaut. Die eingegebene zahl soll vom timer gelesen werden und dementsprechend runtergezählt werden. Das ganze soll im hintergrund geschehen, also der timer soll nicht offen gezeigt werden im programm. Nach ablauf der zeit soll eine Meldung kommen, dass die Zeit abgelaufen ist. Ich bräuchte vielleicht eine starthilfe wie ich im timer die zeit vom numericupdown einlese.
mfg
-
Im Designmodus kannst Du einfach den Winforms-Timer aus der Toolbox auf deine Form ziehen. Der Timer bietet ein Tick-Event an, dass Du implementierst (numericupdown auslesen, runterzählen, ...)
Pass nur auf dass Du keinen Zyklus einbaust. Also z.B. bei Änderung des numericupdown-Wertes den Timer startest und umgekehrt im Tick-Event das numericupdown-Value runterzählst. Notfalls deregistrierst Du die Eventhandler vorübergehend.
-
sorry aber ich versteh nur bahnhof. Das der Timer in der Toolbox ist weiß ich, aber wie ich ihn zum auslesen des numericupdown werts bringe, weiß ich nicht.
-
Zieh mal den Timer auf die Form. Klappt das?
Dann schaust Du im Eigenschaften/Eventfenster nach dem "Tick"-Event und implementierst es. Einfach zweimal clicken im Designer. Mit Events bist Du vertraut, oder?
-
Oder nur in Code:
http://www.hinzberg.net/winforms/winformstimer/Google ist dein Freund
-
µ schrieb:
Zieh mal den Timer auf die Form. Klappt das?
Dann schaust Du im Eigenschaften/Eventfenster nach dem "Tick"-Event und implementierst es. Einfach zweimal clicken im Designer. Mit Events bist Du vertraut, oder?
Timer draufziehen kein Thema. Ja größtenteils Events kann ich ja. Ich probiers mal, muss grade erstmal alle Farbbuttons zuweisen
-
so jetzt hänge ich.
numericUpDown1.Enabled = false; button1.Enabled = false; System.Windows.Forms.Timer formsTimer = new System.Windows.Forms.Timer(); formsTimer.Interval = 1000; formsTimer.Enabled = true;
wie kriege ich jetzt hin, dass der Timer die Zahl aus der NumericUpDown ausließt?
-
Der Timer ruft in dem von dir angegebenen Intervall das Tick-Event auf.
formsTimer.Tick += new EventHandler(TimerEvent); private void TimerEvent(Object myObject, EventArgs myEventArgs) { //hier numericupdown-value auslesen und verarbeiten }
Den Event-Handler (TimerEvent) implementierst Du wie jede andere Methode auch. Der einzige Unterschied ist eben die automatische und periodische Ausführung durch den Timer.
Die Referenz auf das Timer-Objekt sollte NICHT lokal in einer Methode (z.B. in einem Eventhandler eines Controls) existieren. Sonst kommt der Garbage-Collector und kassiert den Timer ein. Die Timer-Referenz sollte einfach ein Feld der Form-Klasse sein.
-
danke, aber ich weiß ja eben nicht, wie ich den numericupdown auslese und verarbeite, den rest weiß ich ja
trotzdem danke.
-
Na einfach numericUpDown1.Value verwenden.
Das ist glaube ich ein decimal. Also entsprechend in ein int oder so casten, je nachdem was du brauchst.
-
ich versuchs mal. einen moment.
-
klappt nicht so wie ich will. Der Timer soll ja nur ausgeführt werden, wenn button1 (Play) betätigt wird. Ich bin grade etwas verwirrt..
-
Zeig mal deinen Code.
-
public Form1() { InitializeComponent(); englishToolStripMenuItem.Checked = true; label1.Text = "Waiting for Play!"; label2.Text = "Playtime: "; System.Windows.Forms.Timer formsTimer = new System.Windows.Forms.Timer(); formsTimer.Interval = 1000; formsTimer.Enabled = true; formsTimer.Tick += new EventHandler(TimerEvent); }
und jetzt weiß ich nicht, wie ich da bei Button1_Click drauf zugreifen soll.
-
Was soll beim Button-click genau passieren?
-
private void button1_Click(object sender, EventArgs e) { if (germanToolStripMenuItem.Checked == true) { string[] strCollection = { "blau", "braun", "gelb", "lila", "orange", "pink", "rot", "grau", "grün" }; System.Random rnd = new Random(); FontFamily myFontFamily = new FontFamily("Modern No. 20"); Font myFont = new System.Drawing.Font(myFontFamily, 16, FontStyle.Bold, GraphicsUnit.Pixel); label1.Location = new Point(175, 50); label1.Font = myFont; label1.Text = strCollection[rnd.Next(strCollection.Length)]; label1.BackColor = farben.RandomColor(); } else { string[] strCollection = { "blue", "brown", "yellow", "purple", "orange", "pink", "red", "grew", "green" }; System.Random rnd = new Random(); FontFamily myFontFamily = new FontFamily("Modern No. 20"); Font myFont = new System.Drawing.Font(myFontFamily, 16, FontStyle.Bold, GraphicsUnit.Pixel); label1.Location = new Point(175, 50); label1.Font = myFont; label1.Text = strCollection[rnd.Next(strCollection.Length)]; label1.BackColor = farben.RandomColor(); } numericUpDown1.Enabled = false; button1.Enabled = false; }
und dann soll halt noch der timer starten (eben die Spielzeit, die eingegeben wurde in der numericupdown)
-
//Als Feld wegen dem Garbage-Collector System.Windows.Forms.Timer formsTimer public Form1() { InitializeComponent(); englishToolStripMenuItem.Checked = true; label1.Text = "Waiting for Play!"; label2.Text = "Playtime: "; formsTimer = new System.Windows.Forms.Timer(); //formsTimer.Interval = 1000; //hier startest du den timer. das ist wohl so nicht gewollt. //formsTimer.Enabled = true; formsTimer.Tick += new EventHandler(TimerEvent); } private void button1_Click(object sender, EventArgs e) { //evtl (int) cast notwendig. weiß gerade den typ von Interval nicht formsTimer.Interval = numericUpDown1.Value formsTimer.Enabled = true } private void TimerEvent(Object myObject, EventArgs myEventArgs) { //quizzfrage: was passiert hier? }