【问题标题】:C# Form Problem: new form losing control and randomly hidingC#表单问题:新表单失去控制并随机隐藏
【发布时间】:2010-12-16 21:04:21
【问题描述】:

我在 c# 3.5 应用程序上遇到了奇怪的表单行为。单击按钮时,我的 form1 会隐藏自己,创建一个新的 form2,并显示 form2。 Form1 还包含当 form2 关闭时触发的事件方法。这是 Form1 中的代码:

Form2 form2;

void button1_Click(object sender, EventArgs e)
    {           
        this.Hide();
        form2 = new form2();
        form2.Show();
        form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    }

void form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        form2.Dispose();
        form2 = null; 
        this.Show();  
    }

现在,我的问题是,有时当我打开 form2(隐藏 form1),或者当我关闭 form2(显示 form1)时,新的表单会在屏幕上出现一闪然后隐藏。它仍然打开,我可以从任务栏中单击它以再次显示它,但窗口本身会发送到任何其他打开的窗口后面。它看起来像打开但立即最小化。

此行为随机发生。有时表单会毫无问题地打开和隐藏,但有时它们会在另一个窗口上失去焦点。我尝试过使用 focus()、activate() 和 topmost,但都无法防止突然隐藏。

有谁知道为什么会发生这种情况以及如何解决?

谢谢。

【问题讨论】:

  • 为什么要更新 form2()?不应该是form2 = new Form();
  • @Soviut - 写问题时可能只是一个错字
  • 你可以试试 ShowDialog() 吗?
  • @Soviut:form2 是一个 Form2 实例。我不确定你是什么意思。 @Stormenet:showDialog 在尝试再次显示 form1 时给了我同样的随机问题:(

标签: c# forms controls hide show


【解决方案1】:

你隐藏表单太快了。有那么一会儿,您的应用程序没有可以包含焦点的窗口。这迫使 Windows 去寻找另一个窗口来给予焦点,它会从另一个应用程序中选择一个。该窗口现在将成为前景窗口,您的第二个窗体将不会获得焦点并在 Z 顺序中显示较低。修复很简单:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}

【讨论】:

  • 我也有类似的问题。但不同的是“我使用的是 showDialog 而不是 show”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 2018-02-02
相关资源
最近更新 更多