I got a funny little email, it was a plea to answer a question that had gotten them stuck. They wanted to pass information between WinForms.
I have a value I want to set in another Windows Form. My radiobutton.checked needs to display on this form. It is a save settings form so value needs to go from parent form to child form. Please help. I tried to pass a value like an example taught but I get a error from Visual Studio. I am so stressed out and I got duplicate question on Stack Overflow but I still can’t get it to work.
Tom from a Community Email
I remember having this issue many moons ago. I figured that I would give a quick demo of passing data between two WinForms. It makes perfect sense once you understand what is going on. Lets dig into how to pass a value between WinForms.
WinForms Passing Data Demo
First make sure that you have two forms. Since the question specific addresses how to pass a radio button checked value to another form. We will do that.
Create a new project. I called mine PassingValues. In this example, I am using C#. Put two radio buttons on the form. I called mine, rbYes and rbNo with a button called btnOpenForm. Here is what form1 looks like.
Form 2 will be a big old form with two radio buttons, also called rbYes and rbNo.
Lets write the code for opening form2 when you press the button.
private void btnOpenForm_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); }
Currently, nothing get passed between the forms. The way you get data from one form to another is through the constructor of the child form. You must add a new parameter.
public Form2()
{
InitializeComponent();
}
Before
public Form2(RadioButton rbFromForm1) { InitializeComponent(); }After
With that lets drop in some code that will allow us to pass the correct control. If I was doing such a binary thing, I would actually pass a boolean or make an enumerated type to pass through. I believe it is slightly more memory efficient to just do the most primitive datatype possible instead of a whole control object. I just wanted to show you could pass a big old object if you wanted. Lets look at what we have.
Form1
using System; using System.Windows.Forms; namespace PassingValues { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnOpenForm_Click(object sender, EventArgs e) { Form2 form2; if (rbYes.Checked) { form2 = new Form2(rbYes); } else { form2 = new Form2(rbNo); } form2.ShowDialog(); } } }
Form2
using System.Windows.Forms; namespace PassingValues { public partial class Form2 : Form { public Form2(RadioButton rbFromForm1) { InitializeComponent(); if(rbFromForm1.Text == "Yes") { rbYes.Checked = true; } else { rbNo.Checked = true; } } } }
Remember that forms are nothing more than objects. They have all the things an normal class would have. You instantiate it, you constructor it, you can write methods for it. As a result you can pass into it what you can pass into any function.
I hope this demonstrates this well enough, it will stick in your head. I know when the IDE does the work for me, I sometimes forget things like that fancy GUI thing it created is just a regular old object. Drop a comment below, if you want to see a Visual Basic implementation.
Thank for answering my email. This helped me so much.
No problem, I am happy to answer them.