C#winform:从其他形式访问公共属性以及静态和公共属性之间的区
我试图了解静态和公共属性之间的区别.但是当我试图以其他形式访问我的公共财产“测试”时,它会说’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’. 请帮助我如何访问其他表单的公共属性. 而且我试图让这个公共财产成为一个“公共静态”.我可以使用这个来访问它: Form1.Test 但我注意到我可以从Form2更改“Test”值,我不想发生这种情况.这就是我试图使用公共财产但没有运气的原因.有人可以向我澄清这些事情.谢谢你们的帮助! EDIT: (For follow up question) John Koerner爵士的答案是我的问题的最佳答案.但我有一个跟进问题,我试图让这些’test’属性成为’静态’,我注意到即使我将这个属性设置为静态或公共属性,它仍然可以在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关闭后,我尝试在Form1_Load中再次中断以检查’Test’的值,并且它已被更改!如何在Form1中将公共属性设置为只在Form2中读取并且不能编辑?请向我澄清一下.非常感谢! 解决方法
您的属性是一个实例变量,因此Form1的不同实例的值可能不同.
如果您尝试从父窗体访问实例变量,最简单的方法是将Form1传递给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; } } 然后,当您从Form1创建一个新的Form2时,您可以这样做: Form2 frm2 = new Form2(this); 如果您希望您的属性是只读的,则不能指定一个setter: public string Test { get { return _test; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |