C# で複数のフォームを使用する方法を理解するのに役立つ、非常に単純なプログラムがあります。Form1( form1 ) と Form2( form2 ) があります。form1 には、ボタン、ラベル、およびシリアル ポートがあります。form2 には、ボタンとラベルがあります。プログラムが行うことは、ボタンをクリックするとフォームが閉じ、他のフォームが開き、ラベルのテキストが変更され、BaudRate が変更されることです。form1 のコードは次のとおりです。
public partial class Form1 : Form
{
//Making a refernce of Form2 called 'form2'.
Form2 form2 = new Form2();
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
//Able to reference form2 in a style that replicated VB.NET
form2.Show();
this.Hide();
form2.label2.Text = ("Hello2");
}
public void Form1_Load(object sender, EventArgs e)
{
label1.Text = ("Start!");
ApplicationPort.BaudRate = 200;
}
form2 のコードは次のとおりです。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
//Declaring the new instance of Form1 called 'form1'.
var form1 = new Form1();
this.Hide();
form1.Show();
form1.label1.Text = ("hello");
MessageBox.Show(form1.ApplicationPort.BaudRate.ToString());
}
public void Form2_Load(object sender, EventArgs e)
{
//Declaring the new instancce for Form1 called 'form1'.
var form1 = new Form1();
MessageBox.Show(form1.ApplicationPort.BaudRate.ToString());
}
}
何が起こっているのか、プログラムを開始すると BaudRate は200になります。ボタンをクリックして 2 番目のフォームが開くと、load イベントでメッセージ ボックスに BaudRateがデフォルト値の9600として表示されます。次に、form2 のボタンをクリックすると、メッセージ ボックスに元の BaudRate の200が表示されます。Load イベント ハンドラが値を取得していないのはなぜですか? 私は参照を書いていますか、それとも何か間違っていますか?Visual Studio 2010 Express WinForms を使用しています。