我试图获得一个返回到父窗体的值,下面是我为此使用的代码,在开始将子窗体加载到面板控件中以避免弹出窗口之前,它一直工作良好。

包含面板的主窗体中的代码

MainMovement child = new MainMovement(new_dat, required_time, number);
child.TopLevel = false;
this.pnlmain.Controls.Add(child);
child.Show();
child.BringToFront();
///Obtaining value back from the child form
string updatingc = child.updatestatus; //This is not working, I am proceeding with some more functions depending on this value, but code does not work here after


子窗体的公共值为updatestatus,它在关闭子窗体之前设置该值。

请告知如何获得此值。我相信这与将child.ShowDialog()更改为child.Show()有关。 (为了将表单加载到面板中,我必须对其进行更改,然后才能正常工作)。

最佳答案

问题是.ShowDialog()在继续之前等待DialogResult,而Show()仅显示表单并继续。在不知道您的子窗体如何工作的情况下很难说,但是我猜想您的子窗体中的任何更新或设置updatestatus都不会在代码到达该行之前更新。

一种可能的解决方案涉及代码的重大重构。您可以将事件添加到MainMovement表单中,该事件在更改updatestatus时触发。
请注意,我将您的updatestatus更改为UpdateStatus并将其变成了一个属性

public MainMovement : Form
{
    public event EventHandler Updated;
    private void OnUpdateStatus()
    {
        if (Updated != null)
        {
            Updated(this, new EventArgs());
        }
    }

    private String updatestatus;
    public String UpdateStatus
    {
        get { return updatestatus; }
        private set
        {
            updatestatus = value;
            OnUpdateStatus();
        }
    }

    // rest of your child form code
}

public ParentForm : Form
{
    public void MethodInYourExample()
    {
        // other code?
        MainMovement child = new MainMovement(new_dat, required_time, number);
        child.Updated += ChildUpdated;
        child.TopLevel = false;
        this.pnlmain.Controls.Add(child);
        child.Show();
        child.BringToFront();
    }

    void ChildUpdated(object sender, EventArgs e)
    {
        var child = sender as MainMovement;
        string updatingc = child.UpdateStatus;
        //rest of your code
    }

}

关于c# - 在C#.net中的Winforms之间传递值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15446720/

10-12 17:50