Random Wort, Random Colorfont und Fontsize verbinden
-
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? }
-
ja ist vom typ int. ja die quizfrage ist echt gut, ich habe mal sowas von keinen plan..
-
Hahaha....
Das musst schon du wissen.
Soll der Wert vom numericupdown runtergezählt werden?
-
ja soll sie. wird wohl über ne schleife laufen oder?
-
Nein keine Schleife. Du hast ja einen Timer der im Sekundentakt runterzählt.
System.Windows.Forms.Timer formsTimer int startSeconds; public Form1() { } private void button1_Click(object sender, EventArgs e) { //wahrscheinlich wolltest du sowas: formsTimer.Interval = 1000; startSeconds = (int)numericUpDown1.Value + 1; formsTimer.Enabled = true } private void TimerEvent(Object myObject, EventArgs myEventArgs) { numericUpDown1.Value = --startSeconds; if(startSeconds == 0) { formsTimer.Enabled = false //weitere aktionen nach timer-ende } }
-
ich bau mal eben aus was danach passiert und dann teste ich mal. Danke schonmal
-
Läuft Perfekt! Danke!
-
Bitte.
Wenn Du fertig bist kannst Du das Spiel ja mal irgendwo hochladen.
-
ich werde dann das setup dazu hochladen
muss nurnoch irgendwie einen zähler machen, der die richtigen antworten zählt und am ende ausgibt, stellt mich wieder vor ein rätsel aber okay
-
RelaxRealistic schrieb:
ich werde dann das setup dazu hochladen
Bitte nur Code sonst führt das hier niemand aus, der noch bei Verstand ist. V.a. weil ein Setup mit Admin-Rechten läuft und nicht durch den NET-Reflector geht.