C# 单击“确定”按钮后,如何关闭当前窗体并将字符串传递给预制件

C# 单击“确定”按钮后,如何关闭当前窗体并将字符串传递给预制件,c#,winforms,C#,Winforms,在表单1中,点击“添加”按钮后会弹出表单2 我想要的是,它将传递输入字符串,刷新表单1中的列表框,并在单击“确定”按钮后关闭表单2。但似乎有点不对劲 private void btnOK_Click(object sender, EventArgs e) { MainForm mainForm = new MainForm(); mainForm.AddMessageInfo = textBoxAddWinForm.Text; mainFo

在表单1中,点击“添加”按钮后会弹出表单2

我想要的是,它将传递输入字符串,刷新表单1中的列表框,并在单击“确定”按钮后关闭表单2。但似乎有点不对劲

private void btnOK_Click(object sender, EventArgs e)
    {
        MainForm mainForm = new MainForm();
        mainForm.AddMessageInfo = textBoxAddWinForm.Text;
        mainForm.Close();
    }

您需要让Form1知道用户按下了
OK
按钮

表格1:

private void btAdd_Click(object sender, EventArgs e)
{
    AddWinForm addWinForm = new AddWinForm();
    DialogResult dr = addWinForm.ShowDialog();

    if(dr == DialogResult.OK)
    {
        string info = addWinForm.AddMessageInfo;

        // do something
    }
}
表格2:

public string AddMessageInfo { get; private set; }

private void btnOK_Click(object sender, EventArgs e)
{
    AddMessageInfo = textBoxAddWinForm.Text; // Set AddMessageInfo
    this.DialogResult = DialogResult.OK; // Let parent form know you pressed OK
    this.Close(); // Close this form
}

这不是一种优雅的方式,但它完成了任务。 另一种方法是,您可以使用代理将信息从一个表单传递到另一个表单

 Public class addWinForm : Form
    {
     ... 
      public string Answer { get { return answer;}}
      private string answer;

      private void btnOK_Click(object sender, EventArgs e)
        {
            //this is supposed
            answer = "1111";
            Close();
        }
    }
public class MainForm : Form
{
    ....
    private AddWinForm addWinForm = null;    
    private void btAdd_Click(object sender, EventArgs e)
        {    
            addWinForm = new AddWinForm();

            addWinForm.ShowDialog();
            string answerAfterButtonOk = addWinForm.Answer;
            addWinForm.Dispose();
            addWinForm = null;
        }
}
 Public class addWinForm : Form
    {
     ... 
      public string Answer { get { return answer;}}
      private string answer;

      private void btnOK_Click(object sender, EventArgs e)
        {
            //this is supposed
            answer = "1111";
            Close();
        }
    }
public class MainForm : Form
{
    ....
    private AddWinForm addWinForm = null;    
    private void btAdd_Click(object sender, EventArgs e)
        {    
            addWinForm = new AddWinForm();

            addWinForm.ShowDialog();
            string answerAfterButtonOk = addWinForm.Answer;
            addWinForm.Dispose();
            addWinForm = null;
        }
}