C# winform: Accessing public properties from other forms & difference between static and public properties
Solution 1
Your property is an instance variable, so the value can be different across different instances of Form1
.
If you are trying to access instance variables from a parent form, the easiest way to do that is to pass Form1 in to the constructor of 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;
}
}
Then when you create a new Form2 from Form1, you can do this:
Form2 frm2 = new Form2(this);
If you want your property to be read only, you can simply not specify a setter:
public string Test
{
get { return _test; }
}
Solution 2
Use of this method 'static'
At first Control label property Modifiers=Public
in Program code below
public static Form1 frm1 = new Form1();
public static Form2 frm2 = new Form2();
in Form1 code below
Program.frm2.show();
in Form2 code below
label1.Text=Program.frm1.text;
![jomsk1e](https://i.stack.imgur.com/5HJTu.jpg?s=256&g=1)
Comments
-
jomsk1e almost 2 years
I am trying to understand whats the difference between a static and public properties. But when I tried to access my public property 'Test' in other form it says 'null'.
Heres 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(); } }
Here's 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; } }
To check the value of 'Test' in Form1, I put a breakpoint to this line:
label1.Text = frm1.Test;
But the value is 'null'.
Please help me how can I access public properties to other forms.
And BTW I tried to make this public property be a 'public static'. I can access this using this:
Form1.Test
But I noticed that I can change 'Test' value from Form2 which I don't want to happen. That's why I am trying to use public property but with no luck. Can somebody clarify me these things. Thanks for all your help guys!
EDIT: (For follow up question)
Sir John Koerner's answer is the best answer for my question. But I have a follow up question, I tried to make these 'test' properties to be a 'static', and I noticed that even if I make this property a static or public property, it still can be edit in Form2. To make myself clear here's a sample:
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(); } }
After Form2 closed, I tried to break again in Form1_Load to check value of 'Test', and it was changed! How can I make a public property in Form1 to readOnly in Form2 and cannot be editted? Please clarify to me. Thanks a lot guys!
-
jomsk1e over 11 yearsThanks for this man, please see my edit for my follow up question, I hope I made my question clear.
-
jomsk1e over 11 yearsthat's it! thanks for your help John! Nice lesson from you! Sorry for being a newbie :(