簡體   English   中英

C#Windows窗體應用程序,從子窗體關閉父窗體

[英]C# windows form application, closing parent form from child

我知道這聽起來會有些混亂,但是確實如此。 所以我有這個父表單,當我單擊一個按鈕時,會出現一個新的子表單(請注意,我的父表單仍處於打開狀態)。 我想要的是當我從子窗體中按下按鈕時想要的是一個新的父窗體來顯示並關閉從一開始就已經打開的父窗體。 我希望這不會讓人感到困惑。 我嘗試使用它,但是似乎沒有任何效果,我的父母表格上有類似的內容

Form2 loging = new Form2();    
loging.ShowDialog();

以我的孩子的形式

Form1 loging = new Form1();
loging.Close()
loging.ShowDialog();
this.Close();

根據您對Mitch的評論,聽起來您需要在關閉子窗體后重新綁定主窗體上的數據。 與關閉/重新打開主窗體相比,這是一種更好的方法。

簡而言之,您不能更改窗口的父級,也不能更改窗口是否為模式窗口。 銷毀孩子,關閉父母,打開新父母,展示新孩子。 另外,如果子窗口不需要是模式窗口,則使用Form.Show()創建子窗口,然后在子窗口中執行以下操作:

parentForm.Close();
Form newParent = new NewParentForm();
newParent.Show();
this.BringToFront();

MFC曾經能夠偽造模態,但是它是通過使用自定義窗口過程來偽造的-在C#中並非特別容易做到。

根據您對Mitch的評論,您應該執行以下操作:

  1. 在您的父窗體中,創建一個指向您的客戶列表的靜態ListView對象

     public partial class Form1 : Form { public static ListView lsvCustomer; public Form1() { InitializeComponent(); // this will allow access from outside the form lsvCustomer = this.listView1; } private void button1_Click(object sender, EventArgs e) { frmInput f = new frmInput(); f.ShowDialog(this); } } 
  2. 然后在您的子表單中,直接從您的子表單中更新列表,如下所示:

     public partial class frmInput : Form { public frmInput() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //update user input to customer list in parent form Form1.lsvCustomer.Items.Add(textBox1.Text); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM