0

我有以下任务。

脚步 :

表单 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();
}
4

2 回答 2

2

我对 WPF 没有太多经验,但基于 Windows Forms 的经验,我认为在启动表单 B 后立即关闭表单 A 是最简单的:

// form A code for launching B
AdminWindow window = new AdminWindow();
window.setCreatingForm = this;
window.Show();
this.Close();

以上应该可以工作,因为启动表单 B 的方法在调用 window.Show() 后不会退出或阻塞。仅当显示模式窗口(在 Widows 窗体中使用 window.ShowDialog() 完成)时,调用才会阻塞。

至于为什么代码中的 Close() 不起作用,看起来在销毁表单 A 之后,您正在创建并显示相同类型的新表单,并且原始表单可能已关闭,但您看到的是新创建的表单.

PS:在 .Net 属性的名称中包含 set 或 get 是一种不好的做法。通过为属性定义 set 和 get 方法来添加 set 和 get 行为。因此,在您的 AdminWindow 代码中,创建表单的属性应命名CreatingFormsetCreatingForm.

于 2013-05-28T07:29:43.860 回答
1

将父窗体的可见属性设置为 false。

        public Form1()
        {
            InitializeComponent();          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var form = new Form2();
            form.Show();
            this.Visible = false;
        }
于 2013-05-28T07:21:00.853 回答