简体   繁体   中英

Updating Form1's widgets by clicking Form2's button in Visual C# Windows Forms

I'm fairly new to Visual C# and I'm writing an GUI app with multiple forms. One form is main window, and the rest are some kind of option windows. When showing an option window, I need to load some data to it (for example a string to window's editbox), then edit it and return back to main window when closing option window. Is there any simple way I can achieve it? I've found some solutions like , or c# event handling between two forms , but I can't really conform it to my needs. I was thinking about passing data in constructor, but how to get it back? I've found something about ShowDialog, but as I said I'm new to C# (started yesterday ^^) and don't know if I can use it.

Any ideas, please?

I found the following previous answer which outlines sending specific properties from the one form to another:

Send values from one form to another form

The using keyword will also ensure that the form is cleaned-up properly, here's a link to it's usage (pardon the pun...) : http://msdn.microsoft.com/en-us/library/vstudio/yh598w02.aspx

I've run into the same issue to be honest, and I have to say that prior to this discussion I would just pass the parent form itself to the child and alter it in that way. Such as:

ChildForm child = new ChildForm(this);  //from the parent

and

public ChildForm(ParentForm parent)
{
    this.parent = parent;
}

Probably not the best convention though, as you probably don't need to access that much from the parent as the child.

Thanks guys, I think I finally get it. Idle_Mind, your idea was the easiest in my point of view, so I decided to use it. If someone else has a problem like this, here's what I've coded:

In main window form: when button is clicked, a new form appears; after closing it, label1 shows the text typed in that form

private void Button1_Click(object sender, EventArgs e)
    {
        LoadDataForm loaddata = new LoadDataForm("initial value");
        if (loaddata.ShowDialog() == DialogResult.OK)
        {
            label1.Text = loaddata.textBox1.Text;
        }
    }

In load data form: argument passed in form's constructor appears in textBox1; textBox1's Modifiers property has to be modified to "public"

public LoadDataForm(string initvalue)
    {
        InitializeComponent();
        textBox1.Text = initvalue;
    }
private void ApplyButton_Click(object sender, EventArgs e)
    {
        DialogResult = DialogResult.OK;
    }

Regards, mopsiok

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM