Best way to do this is with an event. For example, in this case a child form is Form2 with a button and checkbox.
using System;
using System.Windows.Forms;
namespace FormToForm
{
public partial class Form2 : Form
{
public delegate void OnPassData(bool value);
public event OnPassData PassEvent;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
PassEvent?.Invoke(checkBox1.Checked);
}
}
}
Main form, Form1 has a button and checkbox. We create an instance of Form2 and subscribe to the custom event.
using System;
using System.Windows.Forms;
namespace FormToForm
{
public partial class Form1 : Form
{
public bool SomeBool { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2();
f.PassEvent += OnPassEvent;
f.ShowDialog();
f.Dispose();
}
private void OnPassEvent(bool value)
{
checkBox1.Checked = value;
SomeBool = value;
}
}
}
If you want to pass a value from the main form to the child form here is how
using System;
using System.Windows.Forms;
namespace FormToForm
{
public partial class Form2 : Form
{
private readonly bool _someBool;
public delegate void OnPassData(bool value);
public event OnPassData PassEvent;
public Form2()
{
InitializeComponent();
}
public Form2(bool someBool)
{
InitializeComponent();
_someBool = someBool;
checkBox1.Checked = _someBool;
}
private void button1_Click(object sender, EventArgs e)
{
PassEvent?.Invoke(checkBox1.Checked);
}
}
}
Main form
using System;
using System.Windows.Forms;
namespace FormToForm
{
public partial class Form1 : Form
{
public bool SomeBool { get; set; }
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var f = new Form2(checkBox1.Checked);
f.PassEvent += OnPassEvent;
f.ShowDialog();
f.Dispose();
}
private void OnPassEvent(bool value)
{
checkBox1.Checked = value;
SomeBool = value;
}
}
}