the solution is when you open Form2 pass Form1 as a parameter to the constructor of Form2 then you will have all the public controls there.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 ff = new Form2(this);
ff.Show();
}
}
public partial class Form2 : Form
{
private Form1 form1;
public Form2(Form1 frm1)
{
form1 = frm1;
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
MessageBox.Show(form1.button1.Text);
}
}
let say in this example button1 in Form1 is public ,so you have access to it in form2.
but you'd better to make public only whatever you need