【问题标题】:Focusing on winform if already opened?如果已经打开,专注于winform?
【发布时间】:2013-06-19 09:03:09
【问题描述】:

如果表单已经打开,我需要关注表单,否则我想打开新表单。

我已尝试使用此代码来解决我的问题,但它会打开新表单,而不是关注已打开的表单。

foreach (var item in Application.OpenForms)
        {
            Form form1 = item as Form ;
            if (form1 != null)
            {
                form1.Activate();
                break;
            }
            else
            {
                form1 = new Form ();
                form1.Show();
                break;
            }

        }

【问题讨论】:

  • “但不工作”并没有向我们提供任何关于它如何不工作的信息。另外,您真的想要 此应用程序 拥有的所有表单吗?和 any 形式而不是特定类型的形式?为什么只创建一个新的Form 而不是一些自定义表单?
  • 以上代码解决了这个问题,每次打开新表单时都会关注已经存在的表单。
  • @MichaelS.Willy:那么您尝试过哪些调试?你有没有看到Application.OpenForms 是否真的返回任何表格?您是否对此应用程序拥有的表单或当前用户会话中的所有窗口感兴趣?

标签: c# winforms focus


【解决方案1】:

我的猜测是问题在于您实际上只查看第一种形式 - 您在 if 语句的两个部分都有一个 break 语句...而且您也只是使用一般的Form 类型,这几乎肯定是不合适的。你可能想要:

var form = Application.OpenForms.OfType<MyForm>().FirstOrDefault();
if (form != null)
{
    form.Activate();
}
else
{
    new MyForm().Show();
}

【讨论】:

  • 如果我尝试打开已经打开的新表单,我想关注我的应用中已经打开的任何表单。
  • @MichaelS.Willy: 什么线程在运行这段代码?如果您没有打开任何表格,该过程是否仍然有效?还是您实际上开始了一个新进程,并试图在另一个进程中找到一个表单?因为那是完全不同的事情。
  • Not for another process only for this process and not start another process.
  • 现在可以做到了。感谢您宝贵的时间来解决我的问题,这对我帮助很大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2016-02-25
  • 2013-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多