我知道这听起来有点令人困惑,但事实就是如此。所以我有这个父表单,当我点击一个按钮时,会显示一个新的子表单(注意我的父表单仍然打开)。我想要的是当我从我的孩子表格中按下一个按钮时,我想要的是一个新的父表单,以显示并关闭从一开始就已经打开的父表单。我希望这听起来并不令人困惑。我试着玩它但似乎什么都没有用 我的父母表格中有类似的内容
Form2 loging = new Form2();
loging.ShowDialog();
在我的孩子表格上
Form1 loging = new Form1();
loging.Close()
loging.ShowDialog();
this.Close();
答案 0 :(得分:1)
根据您对Mitch的评论,听起来您需要在关闭子表单后重新绑定主表单上的数据。这比关闭/重新打开主表单要好得多。
答案 1 :(得分:0)
简而言之,您无法更改窗口的父级,也无法更改窗口是否为模态。销毁孩子,关闭父母,打开新父母,展示新孩子。或者,如果子窗口不需要是模态的,则使用Form.Show()
创建子项,然后在子窗体中执行以下操作:
parentForm.Close();
Form newParent = new NewParentForm();
newParent.Show();
this.BringToFront();
MFC曾经能够伪造模态,但它是通过使用自定义窗口过程实现的 - 而不是在C#中特别容易做到的事情。
答案 2 :(得分:0)
根据你对Mitch的评论,你应该做什么:
在父表单中,创建一个指向客户列表的静态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);
}
}
然后在您的子表单中,直接从您的子表单更新列表,如下所示:
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);
}
}