C#windows表单应用程序,从子节点关闭父表单

时间:2012-10-07 00:56:18

标签: c# forms parent-child

我知道这听起来有点令人困惑,但事实就是如此。所以我有这个父表单,当我点击一个按钮时,会显示一个新的子表单(注意我的父表单仍然打开)。我想要的是当我从我的孩子表格中按下一个按钮时,我想要的是一个新的父表单,以显示并关闭从一开始就已经打开的父表单。我希望这听起来并不令人困惑。我试着玩它但似乎什么都没有用 我的父母表格中有类似的内容

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

在我的孩子表格上

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

3 个答案:

答案 0 :(得分:1)

根据您对Mitch的评论,听起来您需要在关闭子表单后重新绑定主表单上的数据。这比关闭/重新打开主表单要好得多。

答案 1 :(得分:0)

简而言之,您无法更改窗口的父级,也无法更改窗口是否为模态。销毁孩子,关闭父母,打开新父母,展示新孩子。或者,如果子窗口不需要是模态的,则使用Form.Show()创建子项,然后在子窗体中执行以下操作:

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

MFC曾经能够伪造模态,但它是通过使用自定义窗口过程实现的 - 而不是在C#中特别容易做到的事情。

答案 2 :(得分:0)

根据你对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);
        }
    }