Forum: PC-Programmierung Event weiterreichen


von Peter N. (jackybroun)


Lesenswert?

Ich rufe nach key down einen timer ab. Der timer hat eine Methode die 
auch einwandfrei funktioniert und den Wert hochzählt solange key down 
ist.

Jetzt möchte ich aber eine Methode zur überprüfung der Werte, aus der 
timermethode aufrufen. Wenn ich das einbinde, zählt de rtimer nicht mehr 
weiter. Also Zählt der Wert bloß noch einmal, wenn key down ist. Wie 
oder was muss ich übergeben das key down weiter zählt?

liebe grüße

von Uhu U. (uhu)


Lesenswert?

Kann es sein, daß die aufgerufene Methode crasht und die Ausnahme 
anschließend irgendwo gefressen wird?

von Peter N. (jackybroun)


Lesenswert?

hmm die methode gibt am ende den wert zurück und der wird dann in der 
timer methode ausgegeben, das klappt alles. also denke ich nicht das 
etwas crasht.

Die methode die aus der timer methode heraus aufgerufen wird übergebe 
ich nur einen wert zum rechnen, kanne s daran liegen?

von Peter II (Gast)


Lesenswert?

Peter Naschke schrieb:
> Die methode die aus der timer methode heraus aufgerufen wird übergebe
> ich nur einen wert zum rechnen, kanne s daran liegen?

wir wissen weder die Programiersprache noch die umgebung. Eventuell 
Quellcode währe auch hilfreich.

von Peter N. (jackybroun)


Lesenswert?

Achso entschudigt bitte ich benutze visual studio und programmiere eine 
windows form

von Peter II (Gast)


Lesenswert?

Peter Naschke schrieb:
> Achso entschudigt bitte ich benutze visual studio und programmiere eine
> windows form

und? Welche Sprache C#, C, C++, VB.

von Peter N. (jackybroun)


Lesenswert?

C#

von Peter N. (jackybroun)


Lesenswert?

private void bp1mhz_KeyDown(object sender, MouseEventArgs e)
{
     Gummibaer = 1;
     timer1.Enabled = true;
     timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
        {
            if (timer1.Enabled == false)
            {
                timer1.Stop();
            }
            else
            {
                TB_baeren.Text = menge(TB_eingabebaer.Text);
            }

        }

private string menge(string baer)
{
     anzahl = baer + Gummibaer;
     return Convert.ToString(anzahl);
}

Mal ein Bespiel, wenn die berechnung der menge im else zweig steht wird 
bei gedrücktem key immer eins höher gezählt. schreibe ich so, wird nicht 
höher gezählt

von Uhu U. (uhu)


Lesenswert?

Peter Naschke schrieb:
> TB_baeren.Text = menge(TB_eingabebaer.Text);

Der aktuelle Parameter ist ein String.

> anzahl = baer + Gummibaer;

Was ist das denn? String + int, oder was?

von Peter N. (jackybroun)


Lesenswert?

Das war doch bloß ein beispiel das ich mir schnell asugedacht habe, ich 
möchte wissen wie ich den kopf deklarieren muss um das timer event nicht 
zu unterbrechen.

Und vorab ja da fehlt auch ein key up um den timer zu stoppen ... weil 
es ein beispiel ist

von Peter N. (jackybroun)


Lesenswert?

Und um das nochmal aufzugreifen,der code macht keine probleme und wird 
voll ausgeführt nur der timer wird unterbrochen, so sieht es für mich 
zumindest aus. Also wird in diesem beispiel baer auch bei gedrückter 
taste nur einmal gezählt.

von Arc N. (arc)


Lesenswert?

Peter Naschke schrieb:
> ...
> Mal ein Bespiel, wenn die berechnung der menge im else zweig steht wird
> bei gedrücktem key immer eins höher gezählt. schreibe ich so, wird nicht
> höher gezählt

Abgesehen von dem erwähnten String + Int, reicht es meistens das 
KeyPress-Event zu nutzen (das wird mit der im System eingestellten 
Wiederholungsrate gefeuert, u.U. KeyPreview in der Form einschalten, 
wenn das gebraucht wird), zum anderen müsste bei der Timer-Variante mit 
Invoke/InvokeRequired gearbeitet werden, um keine nicht zulässigen 
Thread übergreifenden Zugriffe auf UI-Elemente durchzuführen:
http://msdn.microsoft.com/en-us/library/ms171728%28v=vs.85%29.aspx

von Uhu U. (uhu)


Lesenswert?

Peter Naschke schrieb:
> Und vorab ja da fehlt auch ein key up um den timer zu stoppen ... weil
> es ein beispiel ist

Wenn du geholfen bekommen willst, dann solltest du die Helfer nicht mit 
solchen Schoten veräppeln.

von Borislav B. (boris_b)


Lesenswert?

Uiuiui, dein Code ist echt lustig ;-)

So weit ich weiß ist die Enabled-Property des Timers gleichtzusetzen mit 
den Start und Stop Methoden.

Peter Naschke schrieb:
> timer1.Enabled = true;
>      timer1.Start();

ist also doppelt gemoppelt. Ebenso macht

Peter Naschke schrieb:
> if (timer1.Enabled == false)
>             {
>                 timer1.Stop();
>             }

keinen Sinn. Wenn der Timer nicht mehr aktiv ist, wird übrigens auch 
deine Tick Methode gar nicht erst aufgerufen

Und wo deklarierst du anzahl? Wenn das noch nur lokal in der einen 
Methode benutzt wird, musst du es nicht der Klasse als Member 
hinzufügen.

Und und und...
Räum erstmal auf, dann sehen wir weiter :-)

: Bearbeitet durch User
von Max T. (charmquark)


Lesenswert?

Poste doch mal Deinen richtigen Code. Es wird ihn schon niemand klauen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.