Ich möchte einige Hinweise zur Struktur meiner Windows-Formular-Anwendung. Meine Anwendung ermöglicht es dem Benutzer, eine SerialPort
zu öffnen, um Daten von einem USB-Gerät zu lesen.
Derzeit wird die Anwendung in das Hauptformular geöffnet, der Benutzer würde dann ein anderes Formular frmPortConfig
öffnen, um den Port zu konfigurieren, würde dieses Formular dann geschlossen sein und der Benutzer würde zum Hauptformular zurückkehren. So wie es aussieht, wählt der Benutzer den Port, klickt auf Öffnen, die Port-Information wird dann an eine andere Port-Konfigurationsklasse übergeben und wird eingerichtet.C# - Anwendungsstruktur & Weitergabe der gelesenen seriellen Daten zurück zu meinem Hauptformular
Wie würde ich dann diese Daten an das Hauptformular zurückgeben?
Ist dies die richtige/effizienteste Methode, um dies zu erreichen?
port config Form:
public partial class frmPortConfig : Form
{
public frmPortConfig()
{
InitializeComponent();
//center the form
this.CenterToScreen();
//get serial ports
getPorts();
}
public void getPorts()
{
//stop user from editing the combo box text
cmbPortList.DropDownStyle = ComboBoxStyle.DropDownList;
//get the available ports
string[] ports = SerialPort.GetPortNames();
//add the array of ports to the combo box within the
cmbPortList.Items.AddRange(ports);
}
private void btnOpenPort_Click(object sender, EventArgs e)
{
//get name of port
string port = cmbPortList.SelectedItem.ToString();
//if the port string is not null
if (port != null)
{
//if port can be opened (evoke open port code in port class)
if (clsPortConfig.openPort(port))
{
//inform user that port has been opened
lblPortStatus.Text = port + " opened successfully";
}
else
{
//inform user that port could not be opened
lblPortStatus.Text = port + " could not be opened";
}
}
}
private void btnClose_Click(object sender, EventArgs e)
{
//close the form
this.Close();
}
port config Klasse:
class clsPortConfig
{
public static bool openPort(string port)
{
try
{
//create new serial port
SerialPort serialPort = new SerialPort();
//serial port settings
serialPort.PortName = port;
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.Handshake = Handshake.None;
//attempt to open serial port
serialPort.Open();
serialPort.ReadTimeout = 200;
//add data received handle to serial port
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
//if serial port is now open
if (serialPort.IsOpen)
{
return true;
}
else
{
//inform user that the port could not be opened
return false;
}
}
catch
{
return false;
}
}
public static void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
//set sender up as serial port
SerialPort serialPort = (SerialPort)sender;
//get data from serial port
string data = serialPort.ReadExisting();
}
}
Wie soll ich die empfangenen Daten zurück zu meinem Hauptformular senden?
Dank
Vielen Dank für Ihre knappe Antwort! Ich wusste, dass es eine einfache Möglichkeit geben würde, die Daten um meine Formulare herum zu übertragen. Denkst du, dass es mir eigentlich besser geht, alles in meiner Hauptform zu machen? Ich dachte, es würde meinen Code sauberer machen, indem ich es in separaten Klassen usw. machen würde. –
Es kommt darauf an. Wenn es nur eine kleine Anwendung ist, um ein paar Befehle zu kommunizieren und eine Ausgabe zu erhalten, die Sie nur anzeigen, dann würde es genügen, alles im Formular zu behandeln. Wenn Sie andererseits es auf verschiedenen PCs verteilen möchten und die Wahrscheinlichkeit hoch ist, dass sich die Anwendung bald ändert, ist es oft ratsam, die GUI von der Logik zu trennen. Aber dann müssten Sie die Klasse, die die Kommunikation und alles andere behandelt, in ein separates DLL-Projekt einfügen. So können Sie nur die DLL-Datei austauschen und nicht bei jedem Update neu kompilieren. –