C# 当设置为true,然后返回到以前的状态时,TopMost如何工作

C# 当设置为true,然后返回到以前的状态时,TopMost如何工作,c#,winforms,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; 它会弹出当前表单,但

我正在开发一个遗留的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应用程序中尝试过它,在我看来,它可以被一个简单的调用焦点方法安全地替代

是我错了,还是我可以换掉它,今晚还能睡个好觉


我感谢你的帮助

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

我在我正在处理的一个遗留项目中看到类似的情况。代码是这样的:

//The form was by-default TopMost 
TopMost = false;
//some codes
MessageBox.Show("something goes here");
//some codes
TopMost = true;
这样做只是为了保持MessageBox位于顶部,因为MessageBox显示在最顶部表单的后面。当他们不用这个的时候,他们可以使用MessageBox;无需重新设置最顶层的属性


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

不,你不应该聚焦窗口。从MSDN:

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


也许你的原作者不知道activate,或者他在他的应用程序中有另一个最顶级的表单造成了一些麻烦,但这已经过去了,这种突然出现的方法是一种残余。。你能安全地用Activate替换它吗?我们对应用程序用户界面了解不够,无法确定;从表面上看,我会说是的,但我也说过,如果现有的代码按照预期工作,那么通过更改它似乎不会有什么好处,如果应用程序将来获得其他最顶级的表单,可能会失去一些功能。我相信你的时间可以花在其他地方

表单不会关闭并重新加载,它只是在代码运行时聚焦,因此不涉及关闭和加载事件。如果您的程序不将此属性保存为设置,则可以从代码中删除该属性。但您是否了解该代码块对表单的作用?它会对您造成什么伤害?你是在试图修复一些没有坏掉的东西吗?@CaiusJard它没有坏处,我只是想清理一些代码,它看起来很多余。非常感谢你,我想这是对我问题的正确和完整的回答!不过,我可能会尝试将其替换为激活,并将应用程序发送到测试,以查看功能是否已更改,并且可能会编辑问题以显示结果。再次感谢你!