跳过Aero窗口动画

3
如何在Aero下编程禁用窗口的“打开”动画?
在打开新的Form时,它会“弹出”(淡入+略微缩放转换)。我想停止这个动画,立刻显示窗口。
我已经尝试将Form的Location属性设置到屏幕之外的某个位置,然后调用Show(),然后将其移动到正确的位置。但是这并没有帮助,动画还是会继续播放。
也许有一些隐藏的属性可以设置?
我不想全局禁用打开/关闭/最小化/最大化动画!我只想跳过我的窗口的“窗口打开”动画。
我已经尝试了单个和多个调用ShowWindow(...),直接在Form.Show()之后进行。但无论传递什么参数,都不能中止打开动画。

1
你为什么想要这样做? - BoltClock
4个回答

3

我知道了!经过尝试使用ShowWindow、BorderStyles,我找到了完美的解决方案:

  1. 将窗体的初始"FormBorderStyle"属性更改为以下之一:
    • None
    • FixedToolWindow
    • SizeableToolWindow
  2. 为表单添加一个"Shown"事件处理程序。
  3. 在事件处理程序内,将FormBorderStyle更改为"Sizeable"(或任何其他)。

现在的关键是,"none"和"*toolwindow"边框样式将抑制该窗体的打开/弹出动画。一旦显示该窗体,边框样式更改,恢复它的原始功能(控制条中的图标,最小化/最大化按钮等...)

编辑:对于可能想要尝试这个的每个人,我必须指出,这将会干扰PInvoke命令后窗口的实际大小。 如果你依赖窗口的大小正确,请确保在完成此操作后将窗口调整为其预期大小。


这也可以工作: this.FormBorderStyle = FormBorderStyle.None; this.Hide(); - Dave

0

您可以在之前和之后更改样式,例如这样,这将防止淡出动画。

        this.FormBorderStyle = FormBorderStyle.Sizable;
        this.Show();

        // Do whatever

        this.FormBorderStyle = FormBorderStyle.Sizable;
        this.Show();

0

我发现动画只在第一次显示表单时才会发生。

所以这里有一个技巧:

var form = new Form();
form.Show();
form.Hide();
form.Show();

我只在Windows 8中进行了测试


0

谢谢回答。但是在我的问题中,我写明了我只想禁用MY窗口的动画,而不是整个系统的动画。 - Riki

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