私のWindowsフォームアプリケーションの構造についていくつかアドバイスをしたいと思います。私のアプリケーションでは、USBデバイスからデータを読み取るためにユーザーがSerialPort
を開くことができます。
現在、アプリケーションはメインフォームに開きます。ユーザーは別のフォームfrmPortConfig
を開いてポートを設定すると、このフォームは閉じられ、ユーザーはメインフォームに戻ります。それが起きると、ユーザーはポートを選択してオープンし、ポート情報は別のポート構成クラスに渡され、セットアップされます。c# - アプリケーションの構造と渡しをシリアル形式のデータをメインフォームに戻す
どうすればこのデータをメインフォームに戻すことができますか?
これを達成するための正しい/最も効率的な方法ですか?
ポート設定フォーム:
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();
}
ポートの設定クラス:
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();
}
}
がどのように私は私のメインフォームに戻って、受信したデータを送信する必要がありますか?
おかげ
簡潔な回答ありがとうございます!私は私のフォームの周りにデータを渡す簡単な方法があることを知っていた。あなたは私の主な形の中でこれを全部やっているほうが良いのではないかと思いますか?私は別のクラスなどでそれを行うことによって私のコードクリーナーを作るだろうと思った。 –
それは異なります。いくつかのコマンドを通信し、表示するだけの出力を受け取る小さなアプリケーションであれば、フォーム内のすべてを処理するだけで十分です。一方、別のPCにそれを配布したい場合は、アプリケーションがすぐに変更される可能性が高く、GUIをロジックから分離することをお勧めします。しかし、通信を扱うClassとそれ以外のものを別々のDLLプロジェクトに入れる必要があります。そのため、DLLファイルを交換するだけで、各アップデートで再コンパイルすることはできません。 –