Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing variable between winforms

I have a problem concerning delegates in a Windows.Forms application.

There are two forms:

  1. the main form, which has a button named "Settings".

  2. the "settings" form, this is the "child" form.

When I click the "Settings" button in the main form, it opens an instance of the Settings form.

My problem is that I need to pass a variable to the Settings form, when I open it. So that the new form will show the variable text. I don't know how to retrieve the information in the child "Settings" form. I did this by following a tutorial online and could not understand from the tutorial how to read the info in the destination form.

Here's what I've done so far, the code in the main form:

public partial class MainForm : Form
{

    /// <summary>
    /// delegate to send data between forms
    /// </summary>
    public delegate void PageInfoHandler(object sender, PageInfoEventArgs e);
    /// <summary>
    /// event of the delegate
    /// </summary>
    public event PageInfoHandler PageInfoRetrieved;

    //other stuff, events blabla

    private void toolStripBtnSettings_Click(object sender, EventArgs e)
    {
        PageInfoEventArgs args = new PageInfoEventArgs(SomeString);
        this.OnPageInfoRetrieved(args);

        SettingsForm settingsForm = new SettingsForm();
        settingsForm.ShowDialog();  
    }

    private void OnPageInfoRetrieved(PageInfoEventArgs args)
    {
        if (PageInfoRetrieved != null)
            PageInfoRetrieved(this, args);
    }
}
like image 848
Amc_rtty Avatar asked Nov 22 '10 16:11

Amc_rtty


3 Answers

Pass any information you want to in to the constructor of Settings form, and provide accessor methods for things you need out of there.

public class SettingsForm : WinForm
{
    private string m_Data;
    private int m_nExample = 0;

    // ctor
    public SettingsForm(string _data)
    {
        m_Data = data;  // you can now use this in SettingsForm
    } // eo ctor

    public int Example {get{return(m_nExample);} }
} // eo class SettingsForm

In the above "example" you can construct a SettingForm with a string and get at an integer it may use. In your code:

private void toolStripBtnSettings_Click(object sender, EventArgs e)
{
    PageInfoEventArgs args = new PageInfoEventArgs(SomeString);
    this.OnPageInfoRetrieved(args);

    SettingsForm settingsForm = new SettingsForm("some data to pass");
    settingsForm.ShowDialog();  

    int result = settingsForm.Example; // retrieve integer that SettingsForm used
}
like image 198
Moo-Juice Avatar answered Oct 20 '22 19:10

Moo-Juice


The Setttings form is a class. It's yours now and you can do what you like with it. So add a parameter (or however many you want) to its constructor. Then in your MainForm call SettingsForm(whatever) and you're all set.

like image 23
Kate Gregory Avatar answered Oct 20 '22 21:10

Kate Gregory


I would suggest adding a property to SettingsForm.

Then, call it like this:

SettingsForm settingsForm = new SettingsForm(); 
settingform.myProperty = myPropertyvalue;
settingsForm.ShowDialog();   
like image 4
B Pete Avatar answered Oct 20 '22 21:10

B Pete