【问题标题】:prevent multiple open .XMAL windows when button pressed按下按钮时防止多个打开的 .XMAL 窗口
【发布时间】:2013-03-04 07:52:28
【问题描述】:

当按钮按下事件时,如何防止打开已经打开的 WPF 窗口(不使用用户控件并且不添加到 Windows 窗体)?

我有以下代码,但每次按下按钮时,它都会根据按钮按下的数量打开 WPF 窗口。

任何人都知道如何防止该错误 谢谢,

 private void button1_Click(object sender, RoutedEventArgs e)
    {
        win2 v2 = new win2();
        v2.Show();

    }

在这里,当我每次点击上面的按钮时,它都会打开一个窗口,但是当它已经打开时;如果我点击同一个按钮,它将打开另一个窗口,而不是聚焦到已经打开的窗口。

我怎样才能防止这种情况发生? (我使用的是 C#)

【问题讨论】:

    标签: c# wpf expression-blend


    【解决方案1】:
     private void button1_Click(object sender, RoutedEventArgs e)
        {
            if(!Application.Current.Windows.OfType<win2>().Any())
            {
                win2 v2 = new win2();
                v2.Show();
            }   
        }
    

    Application.Current.Windows 列出了您的程序拥有的所有当前打开的窗口。我们可以检查是否有任何类型为win2 的已打开,如果没有,则创建一个新的。

    【讨论】:

    • 我只是想知道我是否可以在混合创建的 wpf 窗口上使用上述代码。它会工作吗?还是我必须使用其他代码?可以请解释一下。谢谢
    • @RoshiEnd 我认为这应该适用于所有 WPF,但您可能需要对其进行测试才能确定 :)
    【解决方案2】:
    win2 v2 = null;
    
    private void button1_Click(object sender, RoutedEventArgs e)
    {
    
       if (v2 == null)
        {
           v2 = new win2();
           v2.Show();
        }
        else
           v2.Activate();
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用Application.Current.Windows 查找应用程序中所有打开的窗口。

      如果它包含您的Window,请键入Activate 使其成为焦点,如果该集合不包含您的Window,则创建一个新的

      private void button1_Click(object sender, RoutedEventArgs e)
      {
          if (Application.Current.Windows.OfType<win2>().Any())
          {
              Application.Current.Windows.OfType<win2>().First().Activate();
          }
          else
          {
              new win2().Show();      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 2020-12-13
        相关资源
        最近更新 更多