When you are programming a Windows Forms application, you will invariably need to get variables from a second form window, such as an options form or popup search prompt.

Most of the guides out there will tell you that you have to open the second form with ShowDialog(), which blocks the user from doing anything else until they’ve closed the second form window. This won’t work very well for a find/replace dialog, for instance. It also won’t work very well for custom drawn popup forms.

The quick way to pass variables between the forms is using Delegates. You can set an eventhandler for the Closing event of the second form, and handle the event in the first form. This allows you to capture variables before the second form window has closed.

For this exercise, we’re going to assume that we have two forms:



We’re going to further assume that we’ve clicked some sort of button that opens the OptionsForm with a Show() method call. Now let’s take a look at the magic:

……. snip…….

OptionsForm theform = new OptionsForm();
theform.Closing += new CancelEventHandler(theform_Closing);


private void theform_Closing(object sender, CancelEventArgs e)

   OptionsForm theform = (OptionsForm)sender;

   // Grab the variable from the options form. The options form should set this variable before it closes, and the variable should be marked as public.
   string localvar = theform.thestringvariable;



That’s all there is to it.

Profile Photo for Lowell Heddings Lowell Heddings
Lowell is the founder and CEO of How-To Geek. He’s been running the show since creating the site back in 2006. Over the last decade, Lowell has personally written more than 1000 articles which have been viewed by over 250 million people. Prior to starting How-To Geek, Lowell spent 15 years working in IT doing consulting, cybersecurity, database management, and programming work.
Read Full Bio »

The above article may contain affiliate links, which help support How-To Geek.