我想了解静态和公共属性之间的区别是什么。但是当我试图以其他形式访问我的公共属性'Test'时,它会显示'null'。C#winform:从其他形式访问公共属性和静态和公共属性之间的区别
继承人Form1中:
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();
}
}
这里的窗体2:
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的 '测试' 的值,我把一个断点这一行:
label1.Text = frm1.Test;
但是这个值是'null'。
请帮助我如何访问其他形式的公共财产。
顺便说一句,我试图让这个公共财产成为'公共静态'。我可以用这个访问此:
Form1.Test
但我注意到,我可以改变从窗体2“测试”值,我不希望发生的事情。这就是为什么我试图使用公共财产,但没有运气。有人可以澄清我这些事情。感谢您的帮助!
EDIT: (For follow up question)
Sir John Koerner的回答是我的问题的最佳答案。但是我有一个后续问题,我试图让这些'测试'属性成为'静态',并且我注意到即使我将该属性设置为静态或公共属性,仍然可以在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();
}
}
窗体2关闭后,我试图在Form1_Load的再次突破,以检查“测试”的价值,它被改变!如何使Form1中的公共属性只能在Form2中读取,并且无法编辑?请向我澄清。非常感谢你们!
感谢这位老兄,请看我编辑的跟进问题,希望我明确提出了我的问题。 – jomsk1e
@JRC看我的编辑。 –
就是这样!谢谢你的帮助约翰!从你的好教训!对不起,作为一个新手:( – jomsk1e