失去焦点时窗口闪烁?

5
我一直在使用基于C#的Windows窗体应用程序,并需要一些帮助。我正在尝试重新创建大多数Windows应用程序在表单失去焦点时到父表单时出现的窗口闪烁效果。最好的方式是打开计算器,打开帮助窗口,然后尝试单击计算器,此时帮助窗口会闪烁,失去和获得边缘阴影。
我已经成功地在父级被单击时恢复了子窗口的焦点,但这会创建一个奇怪的闪烁效果,因为父窗口暂时置于子窗口前面。我只是猜测,但我寻找的效果似乎是计算器从未置于帮助窗口之前,然后帮助窗口仅被激活和反激活几次。
我尝试过做一些搜索,看到了一些相关主题,但没有一个解决方案完全匹配。我对制作Windows窗体应用程序还比较新,所以有些事情我还不理解,请耐心等待我如果我一开始不理解某些内容。
提前感谢您!
关于计算器示例的详细说明:
1)从Windows附件中打开计算器 2)在工具栏中转到帮助选项卡并打开关于计算器的选项 3)单击计算器窗口 4)然后,关于计算器窗口将闪烁,但从未落后于计算器
我取得的唯一进展是:
    private void MainForm_Activated(object sender, EventArgs e)
    {
        if (Open == true)
        {
            //blink active window

            _addForm.Activate(); //makes window active
        }
    }

“open”变量是我用来跟踪打开表单的状态的,当我展示另一个表单时,它会变为true。


你找到了什么解决方案?请发布一些你的代码。 - Sam Leach
1
+1,其实是个有趣的问题。杰西,我读了几遍才明白你在描述什么...你可能需要考虑写更清晰的重现步骤以让人们知道你在说什么。 - tnw
不错,很好的复现步骤。你还应该包含你尝试过的代码。看起来你已经完成了90%。 - tnw
是的,在我弄清楚你在问什么的那一分钟里,我被打败了两次 :p。无论如何,我会证实,关于窗口是一个模态对话框,这意味着它从未真正“允许”其父窗口从中夺回焦点。你所提到的闪烁是让你知道一个模态子对话框已经打开,并且会自动发生,你不需要做任何特殊的事情(除了使用ShowDialog()使对话框成为模态)。 - neminem
2个回答

7

在你的示例中,关于窗口被称为模态窗口。模态窗口可以防止用户与父窗口进行交互,直到它被关闭。使用Form.ShowDialog代替Form.Show来将表单呈现给用户作为模态窗口。


非常感谢,我简直不敢相信解决方案如此简单!!!先生,我无法表达我的感激之情!!! - Jesse

0

将子窗体设置为模态。这意味着在焦点可以转移到父窗体之前,必须正确关闭子窗体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接