【问题标题】:WPF/C#: Proper implementation for closing/hiding the form while new form is openingWPF/C#:在打开新表单时关闭/隐藏表单的正确实现
【发布时间】:2010-04-23 15:09:16
【问题描述】:

我在用类似的 winform 寻找类似的东西

// in Form 1
this.Hide();    
Form2 form = new Form2();
form.Show


// in Form 2
// if button pressed, Form 1 will be displayed, while Form 2 will be Hide.

我正在为 FormEventHandler 碰运气,但不知道从哪里开始。

有什么建议/想法吗?

【问题讨论】:

    标签: c# wpf forms show-hide


    【解决方案1】:

    (就本答案而言,Form1Form2 表示继承自 Windows.Window 的类)

    我会推荐以下方法之一

    方法 1:保持Form2 活着并能够再次显示

    在这种情况下,您需要在 Form1 上创建一个实例变量:

    private Form2 form2;
    

    在你的代码中“切换”到Form2,这样做:

    if(form2 == null)
    {
        form2 = new Form2();
    
        DependencyPropertyDescriptor.FromProperty(Window.VisibilityProperty, 
                typeof(Window)).AddValueChanged(form2, Form2_VisibilityChanged);
    }
    
    Hide();
    
    form2.Show();
    

    然后将此函数添加到Form1

    private void Form2_VisiblityChanged(object sender, EventArgs e)
    {
        if(form2.Visility == Visibility.Hidden) Show();
    }
    

    现在您需要做的就是在Form2 中调用Hide(); 将其切换回Form1

    方法二:关闭Form2,每次打开一个新实例

    这更容易,更符合你所拥有的:

    Form2 form2 = new Form2();
    
    form2.Closed += Form2_Closed;
    
    Hide();
    
    form2.Show();
    

    同样,将此函数添加到Form1

    private void Form2_Closed(object sender, EventArgs e)
    {
        Show();
    }
    

    现在,不要在Form2 中调用Hide();,而是调用Close();

    【讨论】:

    • 这会第二次起作用吗?我的意思是,执行多次?
    • 发生错误:对象引用未设置为对象的实例。 > Form1.Show();
    • @eibhrum:我已经根据代码的实际作用修改了这个答案。
    【解决方案2】:

    WindowVisiblity 属性可以设置为Hidden 以隐藏它。所以如果你在Window1:

    this.Visibility = Visibility.Hidden;
    Window2 win = new Window2();
    win.Show();
    

    要再次显示窗口,只需更改其Visibility

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2015-04-09
      相关资源
      最近更新 更多