TopMost如何工作设置为true然后返回到之前的状态

时间:2017-08-18 16:34:07

标签: c# winforms

我正在开发一个传统的C#winforms应用程序,今天我找到了这段代码:

// get our current "TopMost" value (ours will always be false though)
bool top = TopMost;
// make our form jump to the top of everything
TopMost = true;
// set it back to whatever it was
TopMost = top;

它会弹出当前表单,但对我来说这似乎完全是愚蠢的(即使有附加注释)。我在一个小的孤立的winforms应用程序中尝试过它,在我看来,可以通过简单调用Focus方法安全地替换它。

我错了,或者我可以更换它并且今晚仍然睡得好吗?

感谢你的帮助!

3 个答案:

答案 0 :(得分:1)

我在我正在使用的一个遗留项目中看到了类似的东西。代码就像:

//The form was by-default TopMost 
TopMost = false;
//some codes
MessageBox.Show("something goes here");
//some codes
TopMost = true;

这样做是为了让MessageBox保持在最顶层,因为MessageBoxes显示在TopMost表单后面。如果不是这样,他们可以使用MessageBox.Show(this, "something goes here");而无需重新设置TopMost属性

所以我觉得这里发生了类似的事情

答案 1 :(得分:1)

不,你不应该关注窗口。来自MSDN:

  

Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序员应该对子控件使用Select方法或ActiveControl属性,或者表单的Activate方法。

也许你的原创作者并不知道激活,或者他的应用程序中有另一个最重要的形式导致了一些麻烦,但这已经消失了,这种突然出现的方法是一个残余。你能安全地用Activate替换它吗?我们对应用UI的了解不够充分;从表面上看,我会说是的,但是我也说过,如果现有的代码按照预期工作,通过更改它可能会获得很少的里程,如果应用程序获得其他最重要的形式,可能会失去一些功能关于未来。我确定你的时间可以更好地花在其他部分上! :)

答案 2 :(得分:0)

关闭并在加载表单上重新加载它们时,程序可能会将其保存在文件或其他位置,在这种情况下,上面的代码可能会有用,在其他情况下我认为它不会有用。 例如,您将TopMost属性更改为True并关闭表单或程序(如果它保存在某个位置),当您运行应用程序或再次加载此表单时,您可以使用TopMost表单而不更改其值。