0

我知道这听起来有点令人困惑,但它就是这样。所以我有这个父表单,当我单击一个按钮时,会出现一个新的子表单(请注意,我的父表单仍然打开)。我想要的是当我从我的子表单中按下一个按钮时,我想要一个新的父表单来显示并关闭从一开始就已经打开的父表单。我希望这听起来不会令人困惑。我尝试玩弄它,但似乎没有任何效果我的父母表格上有这样的东西

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

在我的孩子表格上

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

3 回答 3

1

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

于 2012-10-07T01:22:50.313 回答
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);
        }
    }
    
于 2012-10-07T02:11:18.947 回答
0

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

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

MFC 曾经能够伪装成模态,但它通过使用自定义窗口过程来做到这一点——这在 C# 中并不是特别容易做到的。

于 2012-10-07T01:06:13.633 回答