C# 如何在表单之间传递信息?

C# 如何在表单之间传递信息?,c#,winforms,C#,Winforms,我试图将信息从表格B传输到表格A。基本上,表格A有一个按钮,打开一个新的表格表格B,然后表格B有一个文本框,您可以在其中输入文本。然后,当您通过关闭按钮关闭表格B时,表格a中的文本框应更新为表格B中输入的文本 但是它不起作用,表格A中的文本框没有收到表格B中输入的文本,它给了我一个空值 //main class of Form A (the one that has to recieve into from Form B) public partial class FormManager : F

我试图将信息从表格B传输到表格A。基本上,表格A有一个按钮,打开一个新的表格表格B,然后表格B有一个文本框,您可以在其中输入文本。然后,当您通过关闭按钮关闭表格B时,表格a中的文本框应更新为表格B中输入的文本

但是它不起作用,表格A中的文本框没有收到表格B中输入的文本,它给了我一个空值

//main class of Form A (the one that has to recieve into from Form B)
public partial class FormManager : Form
    {
        //creating an instance of Form B
        FormContact contactForm;
        public string a;

        public FormManager()
        {
            InitializeComponent();
            ControlsDisabled();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //trying to fill in a textbox from form B into form A
            contactForm = new FormContact();
            contactForm.Show();
            this.Refresh();
            txtFname.Text = contactForm.fname;
            //^^^the main problem, this value is null
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            contactForm = new FormContact(txtFname.Text, txtLname.Text);
            contactForm.Show();
        }

//main class of form B(the form that has to give info to form A)
 public partial class FormContact : Form
    {
       public string fname;
       public string lname;

       public FormContact()
       {
           InitializeComponent();
       }

       private void btnSave_Click(object sender, EventArgs e)
       {
          fname = txtFnameA.Text;
          lname = txtLname.Text;
          this.Refresh();
          this.Close();
       }
       public FormContact(string Fname, string Lname)
       {
           InitializeComponent();
           txtFnameA.Text = Fname;
           txtLname.Text = Lname;
       }

    }
在用户有机会输入值之前,您在显示FormContact后立即读取fname值。请尝试以下操作:

contactForm.ShowDialog();

txtFname.Text = contactForm.fname;

最简单的方法是使用contactForm.ShowDialog,使用此选项,您可以为Dialog.OK属性指定一个按钮,使其关闭contactForm并返回到表单A。为了更简单,请将contactForm中的元素设置为Public,这样您就可以键入诸如txtFname.text=contactForm.txtextSerName之类的内容。当然,这位于contactForm.ShowDialog之后。

打开您的contactForm,如这:

否则,您的formContact对话框对象将在您可以触摸其属性之前被释放。

-当您使用.Close时,您正在删除数据源。试着用这个。隐藏;相反
using (var contactForm = new FormContact())
{
    if (contactForm.ShowDialog() == DialogResult.OK)
    {                    
        txtFname.Text = contactForm.fname;              
    }    
}