静的プロパティとパブリック プロパティの違いを理解しようとしています。しかし、パブリック プロパティ 'Test' に他の形式でアクセスしようとすると、'null' と表示されます。
フォーム 1 は次のとおりです。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private string _test;
public string Test
{
get { return _test; }
set { _test = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
_test = "This is a test";
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Show();
}
}
Form2 は次のとおりです。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
label1.Text = frm1.Test;
}
}
Form1 の「Test」の値を確認するために、次の行にブレークポイントを設定しました。
label1.Text = frm1.Test;
しかし、値は「null」です。
パブリック プロパティに他のフォームにアクセスする方法を教えてください。
ところで、このパブリック プロパティを「public static」にしようとしました。これを使用してこれにアクセスできます:
Form1.Test
しかし、Form2 から 'Test' の値を変更できることに気付きました。そのため、私は公共の財産を使用しようとしていますが、運がありません。誰かが私にこれらのことを明確にすることができますか. 助けてくれてありがとう!
EDIT: (For follow up question)
サー・ジョン・コーナーの答えは、私の質問に対する最良の答えです。しかし、フォローアップの質問があります。これらの「テスト」プロパティを「静的」にしようとしましたが、このプロパティを静的またはパブリック プロパティにしても、Form2 で編集できることに気付きました。自分自身を明確にするために、ここにサンプルがあります:
public partial class Form2 : Form
{
private Form1 f1;
public Form2(Form1 ParentForm)
{
InitializeComponent();
f1 = ParentForm;
}
private void Form2_Load(object sender, EventArgs e)
{
label1.Text = f1.Test;
}
private void button1_Click(object sender, EventArgs e)
{
f1.Test = "This test has been changed!";
this.Close();
}
}
Form2 を閉じた後、「Test」の値を確認するために Form1_Load で再度ブレークしようとしたところ、変更されました。Form1 のパブリック プロパティを Form2 の readOnly にして編集できないようにするにはどうすればよいですか? 私に明確にしてください。どうもありがとう!