Form1 - это контроллер SerialPort, то есть Form1 настраивает SerialPort. Если у вас есть событие, которое влияет на SerialPort, например, `SerialPort1.Writeln ', вы должны передать ссылку на метод в конструктор диалога. Это будет логически разделять классы, пока разделяет методы.
Вы можете создать собственный объект EventArgs для передачи строки обратно в ваш SerialPort:
public class WriteToSerialPortEventArgs : EventArgs
{
public WriteToSerialPortEventArgs (string Write)
{ WriteBytes = Encoding.GetBytes(write); } // simplified - see MSDN for more options
public byte[] WriteBytes
{ get; private set; }
}
Form1
образец делегата события передан в ваш диалог SMS:
void OnWriteToSerialPort(object sender, WriteToSerialPortEventArgs e )
{
SerialPort1.WriteLine(e.WriteBytes);
}
Напишите ваш конструктор SMS:
// field
Action<object, WriteToSerialPortEventArgs> writeDelegate;
public SMS (Action<object, WriteToSerialPortEventArgs> writeDelegate)
{
this.writeDelegate = writeDelegate;
this.button1.Click += new EventHandler(button1_Click);
}
... делегат события SMS:
void button1_Click(object sender, EventArgs e)
{
writeDelegate.Invoke(sender, new WriteToSerialPortEventArgs (txtBox.Text);
}
Технически, вам не нужна полная сигнатура метода Invoke(...)
. Я включил его для полноты и можно записать как:
writeDelegate(sender, new WriteToSerialPortEventArgs (txtBox.Text);