如何在c#中调用windows窗体后返回调用方法?

时间:2017-07-10 11:06:17

标签: c# .net winforms

我有一个方法,我在A类中调用一个新的Windows窗体。在新窗体中,我使用一个下拉菜单,将选定的项目从下拉列表存储在一个名为selectedItem的变量中。我必须在A类中访问此selectedItem。我使用以下代码。

public class A
{
    public method callingmethod()
    {
        ExceptionForm expform = new ExceptionForm();
        expform.Show();
        string newexp = expobj.selectedexception;
    }
}

我的代码采用新形式,

public partial class ExceptionForm : Form
{
    public string selectedexception = string.Empty;
    private void btnExpSubmit_Click(object sender, EventArgs e)
    {
        selectedexception = this.comboBox1.GetItemText(this.comboBox1.SelectedItem);
        this.Close();
        return;
    }
}

现在点击“提交”按钮后,我在selectedItem中得到了正确的值,但是我无法将其传递给A类。如何重新回到A类?

2 个答案:

答案 0 :(得分:1)

使用ShowDialog()方法。

expform.ShowDialog();
string newexp = expobj.selectedexception;

答案 1 :(得分:1)

如果您可以通过禁用父级表单发布ExceptionForm,请转到ShowDialog。但是,如果您不希望禁用父级并继续弹出ExceptionForm作为新的独立窗口,请尝试将事件返回到父窗体。在这里,我展示了如何执行此操作的示例:

public partial class ExceptionForm : Form
{
    public delegate void SelectValueDelegate(string option);
    public event SelectValueDelegate ValueSelected;

    private void btnExpSubmit_Click(object sender, EventArgs e)
    {
        this.Close();

        if (this.ValueSelected!= null)
        {
            this.ValueSelected(this.comboBox1.GetItemText(this.comboBox1.SelectedItem));
        }

        return;
    }
}

在致电课堂上:

public class A
{
    public method callingmethod()
    {
        ExceptionForm expform = new ExceptionForm();
        expform.ValueSelected += ExceptionForm_ValueSelected;
        expform.Show();
    }

    private void ExceptionForm_ValueSelected(string option)
    {
        string newexp = option;
        // Do whatever you wanted to do next!
    }
}