Autor Beitrag
Reminos
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 29.09.15 15:56 
Hallo Zusammen,

ich bin absoluter Anfänger was die Programmierung mit C# angeht. Bisher konnte ich jedoch alle Probleme lösen.
Mein Vorhaben:

Ich habe 2 Textboxen und eine DataGridView.

in Textbox1 wird mittels Barcode eine Zahl eingelesen und in Textbox2 ebenfalls.

Bisher habe ich es über Maxlength gelöst, das nach dem Scannen in Textbox1 der Cursor in Textbox2 springt und widerrum nach der Eingabe alles automatisch gespeichert wird.

Das Problem ist nun allerdings, das die Nummer die gescannt wird, mal 8 oder 9 Zeichen hat.

Gibt es eine Möglichkeit einen Timer einzubauen der nach dem Scan ( ca 1000ms ) automatisch ins nächste feld TABT?

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt :)

Lieben Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 29.09.15 16:06 
Eigentlich kann man jedem handelsüblichen Barcodeleser sagen das er die gescannten Daten mit einem Start/Stopp Zeichen umklammern soll. Das ~tabben~ kannst du dann daran festmachen das du vom Barcodeleser das Stopzeichen gesendet bekommst. Die Start-Stop Zeichen mußt du halt noch von gescannten Wert wegtrimmen damit du nur die Daten haßt.
Reminos Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 29.09.15 16:18 
Hallo Ralf,

vielen Dank für deine Antwort.
Leider habe ich so eine Funktion nicht finden können.

Ich dachte es gäbe vielleicht auch den "umständlicheren" Weg über den Timer. Sobald Textbox1.Text gefüllt wurde und 1000 ms keine Eingabe erfolgt, mache dies:

So in der Art. :) Ohje,,, ich verzweifle noch daran.


EDIT: Ok ich habe es hinbekommen. Scheinbar war im Scanner als Abschluss die "Enter" Taste registriert.

ich habe es jetzt über das KeyDown_Menu geregelt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 if (e.KeyData == Keys.Enter)
            {
                e.SuppressKeyPress = true;
                SelectNextControl(ActiveControl, truetruetruetrue);
            }
Reminos Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 16.10.15 15:05 
Hallo,

ich bin es nochmal, wollte jedoch nicht extra ein neues Thema eröffnen, da es auch wieder um Timer geht.

Ich habe ein DataGridView, die Daten kommen aus einer SQLite-Datenbank. Andere externe Programme schreiben auch auf dieser Datenbank, womit sich der Datensatz natürlich entsprechend verändert.
Dazu habe ich einen Button eingefügt der für den Refresh zuständig ist. Funktioniert ohne Probleme.

Nun habe ich mir gedacht, um dass ganze ein wenig Nutzer freundlicher zu gestalten, lasse ich die Datenbank mittels Timer jede Sek. refreshen. funktioniert auch.

Problematik: ich habe eine Textbox die als Suchfeld dient. D.h. ich tippe etwas ein und nur der entsprechende Eintrag wird mir in der DataGridView angezeigt. Leider macht der Timer mir dies zunichte.


Gibt es eine Möglichkeit im TextChangeEvent den Timer für diese Zeit zu stoppen und nach, sagen wir 120 Sekunden wieder zu starten?

So spart sich der Benutzer den "Klick" auf refresh und kommt dennoch an die aktuellen Daten.

Vielen Dank.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 17.10.15 09:32 
Hallo,

mit welchem Intervall läuft denn der Timer?
Du könntest einfach eine Zählvariable im Tick-Ereignis verwenden, z.B. so
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if (counter > 0)
{
  counter--;
}
else
{
  // dein bisheriger Code
}

Und im TextChange-Ereignis setzt du dann die Variable counter auf den Startwert (120s / Intervall).