Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing Form's Control from another class C#

Tags:

c#

I'm a newbie in c# and visual studio, but not programming in general. I searched for answer to my question for 3 days and I found plenty of them, but for some weird reason (I'm sure I'm missing something very obvious) I cannot get it to work. I think it's the most basic question newbies like me ask. I have a form (Form3) with a text box and a button (I set it up is just for testing purposes). I want to populate and read this text box from another class. I understand the most proper way to do this is to create a property in Form3.cs with GET and SET accessors. I did that but I cannot get it to work. I'm not getting any error messages, but I'm not able to set the value of the text box either. It just remains blank. Here's my sample code:

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public string setCodes
        {
            get { return test1.Text; }
            set { test1.Text = value; }
        }

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {   }

        private void button1_Click(object sender, EventArgs e)
        {
            a.b();
        }
    }

    public class a
    {       
        public static void b()
        {
            Form3 v = new Form3();
            v.setCodes = "abc123";
        }
    }
}

Can someone lend me a hand solving this?

like image 460
Tony Avatar asked May 14 '12 02:05

Tony


People also ask

How do you access a form control from another form?

A Form is a Control so we can cast any form in your project as a simple Control object. Example; Control c = TheForm("Form1"); Once we have this, we can gain access to ALL the child controls including the children in other container controls on the form.


2 Answers

The problem is you are setting the value to a new instance of the form. Try something like this:

public partial class Form3 : Form {
    public string setCodes
    {
        get { return test1.Text; }
        set { test1.Text = value; }
    }

    private A a;

    public Form3()
    {
        InitializeComponent();
        a = new A(this);
    } 

    private void button1_Click(object sender, EventArgs e)
    {            
        a.b();            
    }


    private void Form3_Load(object sender, EventArgs e)
    {

    }
}

public class A
{       
    private Form3 v;

    public a(Form3 v)
    {
        this.v = v;
    }

    public void b()
    {
        v.setCodes = "abc123";
    }
}    
like image 73
Ivo Avatar answered Oct 08 '22 23:10

Ivo


You're creating a brand new Form3() instance.
This does not affect the existing form.

You need to pass the form as a parameter to the method.

like image 23
SLaks Avatar answered Oct 08 '22 23:10

SLaks