关闭背景形式从前景形式在C#wpf

时间:2013-05-28 07:15:18

标签: c# wpf winforms

我有以下任务。

步骤:

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

2 个答案:

答案 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;
        }