2015-12-18 119 views
1

我正在使用容器(mdi父窗体)打开主菜单。主菜单允许用户连接到数据库并打开其他程序。我试图显示哪些数据库连接到容器(父窗体),但我有问题将字符串从主菜单传递到容器。当用户点击连接按钮时,我不知何故需要容器有一个事件监听器来监听子窗体中的按钮点击。当在子窗体上单击连接按钮时,它会将变量传递给父窗体。我会如何去做这件事?将变量从子窗体传递给父窗体

+0

也许这里的答案可以帮助:HTTP:/ /stackoverflow.com/questions/5233502/how-to-return-a-value-from-a-form-in-c – spersson

回答

5

也许你可以使用一个事件,您可以访问在Form1中的值。因此,每个数据库名称上的孩子发生改变时,形成你可以得到一个回呼父窗体上

儿童

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; 
     } 
    } 
+0

它的工作!!!!!!非常感谢 :) –

0

只需声明一个公共变量例如:Form1中的var1以及从Grid中选择行将指定的值分配给Form2公共变量var1。

然后一旦你关闭Form2。通过说你有在Form1上一个文本框,应通过提得到的Form2网格中选择的值作为

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

希望这有助于

相关问题