Das Programm läuft in etwa wie erwünscht. Wollte etwas Feedback geben.
Das SerialTemplate funktioniert bei mir nicht. Auch die Exe aus dem Debug-Ordner empfängt bei mir keine Daten. Auserdem ist das Ding mir dem framework 3.0 etwas veraltet. Beim Versuch das Beispiel aus dem VisualStudio 2022 su starten kommt es zum Abbruch. Möglicherweise habe ich mich damit nicht ausgiebig genug beschäftigt.
[FAQ] Warum blockiert mein GUI? hat mich jedoch auf den Weg gebracht.
Folgendes habe ich gemacht:
Jetzt läuft alles sehr geschmeidig. Den Aufwand mit dem Seriellen Port in eigene Klasse auszulagern habe ich nicht gemacht. Bin auch so zufrieden.
Danke für die Infos. ich werde die Template ausprobieren.
Hallo Gemeinde,
ich versuche ein Windowsprogramm für das Kalibrieren eines Sensors zu programmieren. Ich habe zwei COM-Ports (serialPortCalibrator, serialPortMultimeter) auf denen ich die Befehle an Kalibrator und Multimeter sende. Auslesen von COM-Ports tue ich mit einem getrennten Thread. Funktionieren tut alles ausser dass, ich die Messwerte (multimeterValueFloat1, multimeterValueFloat2) nicht in die textBoxen reinbekomme.
Wenn ich die Variablen von der calibrationRoutine die ich per Tastenclick aufrufe in der MessageBox ausgebe sind diese aktuell. Sie haben die richtigen und aktuellen Messwerte von dem Multimeter.
Mir ist verständlich dass, die Kalibrierroutinedie gewisse Schritte ausführt (anfragen, warten, COM-Ports lesen, werte in die Felder schreiben ) sich nicht für die aktualität der Variblen interessiert.
Wie kann ich die aktualieserten Variablen (multimeterValueFloat1, multimeterValueFloat2) zum Schluß in die Formular-Felder schreiben?
Das habe ich bischer ohne Erfolg probiert:* Werte direkt aus der Routine schreiben
Relevanter Codeabschnitt...
public partial class MainForm : Form
{
// Messdaten
double multimeterValueFloat1 = 0.000;
double multimeterValueFloat2 = 0.000;
void calibrationRoutine(object sender, EventArgs e){
// Calibrator -> 0%
serialPortCalibrator.WriteLine(":ps 0\n\r");
System.Threading.Thread.Sleep(10000);
// Multimeter ablesen
serialPortMultimeter.WriteLine("S?\r");
System.Threading.Thread.Sleep(300);
this.labelMesswert1Multimeter.Invoke (new MethodInvoker(calibrationWriteLabel1));
// Calibrator -> 100%
serialPortCalibrator.WriteLine(":ps 100\n\r");
System.Threading.Thread.Sleep(10000);
// Multimeter ablesen
serialPortMultimeter.WriteLine("S?\r");
System.Threading.Thread.Sleep(300);
this.labelMesswert5Multimeter.Invoke (new MethodInvoker(calibrationWriteLabel2));
}
void calibrationWriteLabel1(){
labelMesswert1Multimeter.Text = multimeterValueFloat1.ToString();
}
void calibrationWriteLabel2(){
labelMesswert2Multimeter.Text = multimeterValueFloat2.ToString();
}
}
Deine Antwort hat mich zum Ergebnis geführt. Das Stichwort lautet "Control.PreviewKeyDown-Ereignis". Das Problem ist, die Pfeiltasten sind keine Buchstabentasten und werden anders als sonst behandelt.
Hier ist aber schon alles beschrieben: Control.PreviewKeyDown-Ereignis
Danke für schnelle Hilfe.
Hallo an alle!
Ich habe eine Anwendung bei der in den Textboxen einige digitalen Werte stehen. Die Werte können zwischen 0 und 255 liegen. Wenn ich in die Textbox reinklicke möchte ich den Wert mit den Navigationstasten hoch und runter (bzw. rechts und links) hoch bzw. runterzählen.
Beispiel: In der Textbox steht die Zahl 42, wenn ich die Up-Taste drücke soll es sich auf 43 ändern und wenn ich Down-Taste drücke soll es sich auf 41 ändern.
Das es eine komplexe Routine sein wird ist mir bewust. Wie sieht das Event für die Textbox aus?