C# winform: Accessing public properties from other forms & difference between static and public properties

27,432

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; 
Share:
27,432
jomsk1e
Author by

jomsk1e

#SOreadytohelp

Updated on July 18, 2022

Comments

  • jomsk1e
    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
    jomsk1e over 11 years
    Thanks for this man, please see my edit for my follow up question, I hope I made my question clear.
  • jomsk1e
    jomsk1e over 11 years
    that's it! thanks for your help John! Nice lesson from you! Sorry for being a newbie :(