Tag: windowstate

将WindowState设置为Maximized会导致窗口显示得太早

我读到Load事件应该在创建窗口句柄之后但在窗口实际可见之前触发。 在大多数情况下,这似乎是真的。 但是,我发现当我创建一个WindowState属性设置为FormWindowState.Maximized (通过VS设计器,或者在构造函数中以编程方式),窗口在Load事件触发之前变得可见。 例如: using System; using System.Windows.Forms; namespace MyApplication { public partial class MyForm : Form { public MyForm() { InitializeComponent(); WindowState = FormWindowState.Maximized; } protected override void OnLoad(EventArgs e) { MessageBox.Show(“OnLoad – notice that the window is already visible”); base.OnLoad(e); } } } 这反过来导致显示的表单闪烁很多,同时在窗口可见时调整其控件(在Form.Load事件期间Form.Load )的大小。 如果我没有将状态设置为最大化,那么所有resize都会在窗口显示之前完成(这是我所期望的)。 我可以推迟设置WindowState直到Load事件结束,但是仍然会导致大量闪烁,因为窗口变得可见,然后所有控件都会resize。 有什么想法吗?

如何防止其他应用程序窃取焦点?

我有一个全屏窗口,其中Topmost属性设置为true。 每当应用程序更改其WindowState属性时,即使它具有活动焦点,我的窗口也会自动最小化。 例如,下面的代码举例说明了这个问题。 窗口停用3秒后,窗口将从最小化更改为正常,从而最小化其他全屏应用程序。 // Topmost = false private void Form1_Deactivate(object sender, EventArgs e) { System.Threading.Thread.Sleep(3000); this.WindowState = FormWindowState.Normal; } 在这种情况下,有没有办法保留全屏窗口的WindowState属性? 我希望用户选择最小化全屏应用,所以我想阻止其他程序窃取焦点。