2015-12-18 116 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; 

希望這有助於

相關問題