0

私には2つのフォームがあります。フォーム 1 とフォーム 2。SerialPort 変数は Form1.cs で宣言されています

    public SerialPort COM = null;

    public SerialPort GetCOMM
    {
        get { return COM; }
    }

Form2 からその変数にアクセスする必要があります。(Form1 は Form2 を作成します)
これらの方法でシリアルポートにアクセスしようとしました

Form1 f1 = new Form1();
int result = myfunction(f1.GETCOMM);
int result = myfunction(f1.COM);

そしてそれは機能していません。私が間違っていることは何ですか?

4

2 に答える 2

3

Form1 への参照を必要としないように、SerialPort をパラメーターとして受け取る Form2 のメソッドを個人的に作成します。私はこのようなことをします。または、SerialPort をパラメーターとして受け取る Form2 に対してコメントされた jaminator のようなカスタム コンストラクターを作成できます。

フォーム1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.setSerialPort(serialPort1);
        frm2.Show();
    }
}

フォーム2

public partial class Form2 : Form
{
    SerialPort myPort;
    public Form2()
    {
        InitializeComponent();
    }
    public void setSerialPort(SerialPort port)
    {
        myPort = port; 
    }
}

カスタム コンストラクターを使用した 2 番目のオプション

フォーム1

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2(serialPort1);
        frm2.Show();
    }
}

フォーム2

public partial class Form2 : Form
{
    SerialPort myPort;
    public Form2( SerialPort port)
    {
        InitializeComponent();
        myPort = port; 
    }
}
于 2012-10-19T04:39:49.820 に答える
0

両方のフォームが同じアプリの一部である場合、静的な SerialPort オブジェクトを Program.cs クラスに配置できます。次に、Program.SerialPort によってどこからでも呼び出します

于 2012-10-19T05:03:49.010 に答える