繁体   English   中英

在C#WPF中从前台表单关闭背景表单

[英]Closing background form from foreground form in C# wpf

我有以下任务。

脚步 :

点击按钮,表格A打开表格B

预期:

表格B开始,表格A关闭。

结果:

表格B开始但表格A保留在背景中。

我试图通过将Form A的引用传递给Form 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();
}

我没有使用WPF的丰富经验,但是基于Windows窗体的经验,我认为在启动窗体B之后立即关闭窗体A是最容易的:

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

上面的方法应该起作用,因为启动window B的方法在调用window.Show()之后不会退出或阻塞。 仅在显示模式窗口时该调用才会阻塞(在Widows Forms中是通过window.ShowDialog()完成的)。

至于为什么代码中的Close()无法正常工作,在销毁窗体A之后,您似乎正在创建并显示相同类型的新窗体,也许原始窗体已关闭,但是您看到的是新创建的窗体。

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

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

        public Form1()
        {
            InitializeComponent();          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var form = new Form2();
            form.Show();
            this.Visible = false;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM