将变量从子窗体传递到父窗体

本文关键字:窗体 变量 | 更新日期: 2023-09-27 18:27:22

我正在使用一个容器(mdi-parent)打开一个主菜单。主菜单允许用户连接到数据库并打开其他程序。我试图在容器(父窗体)上显示您连接到的数据库,但在将字符串从主菜单传递到容器时遇到问题。当用户单击连接按钮时,我需要容器有一个事件侦听器来侦听子窗体上的按钮单击。当在子窗体上单击连接按钮后,它会将变量传递给父窗体。我该怎么做?

将变量从子窗体传递到父窗体

也许您可以使用一个事件。因此,每次子窗体上的数据库名称更改时,您都可以在父窗体上得到一个回调

儿童

public partial class Child : Form
    {
        public event DatabaseChangeHandler DatabaseChanged;
        public delegate void DatabaseChangeHandler(string newDatabaseName);
        public Child()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //When the database changes
            if (this.DatabaseChanged != null)
            {
                this.DatabaseChanged("The New Name");
            }
        }
    }

public partial class Parent : Form
    {
        private Child childForm;
        public Parent()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            // Open the child form
            childForm = new Child();
            childForm.DatabaseChanged += childForm_DatabaseChanged;
            childForm.ShowDialog();
        }
        void childForm_DatabaseChanged(string newDatabaseName)
        {
            // This will get called everytime you call "DatabaseChanged" on child
            label1.Text = newDatabaseName;
        }
    }

只需在Form2中声明一个公共变量例如:var1,然后在从Grid中选择行时,将所选值分配给Form2公共变量var1。

然后一旦你关闭Form2。你可以访问Form1中的值,比如你在Form1中有一个文本框,它应该通过提到从Form2的网格中获得所选的值

 Form2 f2=new Form2();
TextBox1.Text=f2.var1;

希望这能帮助