我有以下任务。
步骤:
表格A点击按钮
打开表格B.预期:
表格B开始,表格A关闭。
结果:
表格B开始,但表格A仍然在后台。
我尝试通过将表单A的引用传递给表单B来解决问题,但奇怪的是它不起作用。
在Form A :( MainWindow)
AdminWindow window = new AdminWindow();
window.setCreatingForm = this;
window.Show();
Form B
:(AdminWindow)
public Window setCreatingForm
{
get { return creatingForm; }
set { creatingForm = value; }
}
public Window creatingForm { get; set; }
private void logOutClick(object sender, RoutedEventArgs e)
{
if (creatingForm != null)
creatingForm.Close(); `// Why does this not close the background Form`
MainWindow window = new MainWindow();
window.Show();
}
答案 0 :(得分:2)
我对WPF没有多少经验,但基于Windows Forms中的那个,我认为在开始表单B之后立即关闭表单A是最容易的:
// form A code for launching B
AdminWindow window = new AdminWindow();
window.setCreatingForm = this;
window.Show();
this.Close();
以上应该有效,因为在调用window.Show()之后,启动表单B的方法不会退出或阻塞。如果显示模态窗口(在Widows Forms中使用window.ShowDialog()完成),则调用仅阻止。
至于为什么你的代码中的Close()不起作用,看起来就像在破坏表单A之后你正在创建和显示相同类型的新表单,也许原始表单已经关闭但是你看到的是新创建的。
PS:在.Net属性的名称中包含set或get是一个不好的做法。通过定义属性的set和get方法来添加set和get行为。因此,在您的AdminWindow代码中,创建表单的属性应该命名为CreatingForm
,而不是setCreatingForm
。
答案 1 :(得分:1)
将父窗体的visible属性设置为false。
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var form = new Form2();
form.Show();
this.Visible = false;
}