【问题标题】:Skip Aero Window Animation跳过 Aero 窗口动画
【发布时间】:2016-06-03 03:41:31
【问题描述】:

如何以编程方式禁用 Aero 下窗口的“打开”动画?

当打开一个新表单时,它会“弹出”(淡入 + 轻微的缩放转换)。 我想停止这个动画并立即显示窗口。

我已经尝试将 Form 的 Location 属性设置到屏幕外的某个位置,然后调用 Show(),然后将其移动到正确的位置。 但这无济于事,动画将继续。

也许我可以设置一些隐藏的属性?

我不想全局禁用打开/关闭/最小化/最大化动画! 我只想跳过窗口的“开窗”动画。

我已经在 Form.Show() 之后直接使用了单个和多个调用 ShowWindow(...)。但无论我传递什么参数,都不会中止开场动画。

【问题讨论】:

  • 你为什么要这样做?

标签: c# windows winforms animation


【解决方案1】:

我明白了!在尝试了 ShowWindow, BorderStyles 之后,我找到了我的确切解决方案:

  1. 将表单的初始“FormBorderStyle”属性更改为以下属性之一:
    • 固定工具窗口
    • SizeableToolWindow
  2. 向表单“显示”事件添加事件处理程序。
  3. 在事件处理程序中,将 FormBorderStyle 更改为“Sizeable”(或任何其他)。

现在的诀窍是“none”和“*toolwindow”边框样式将抑制该表单的打开/弹出动画。然后,一旦显示表单,边框样式就会更改,使其具有原始功能(控制栏中的图标,最小化/最大化按钮等......)

编辑:对于可能也想尝试这个的每个人,我必须指出,当使用 PInvoke 完成时,这个 can 会与窗口的实际大小发生冲突命令。 如果您依赖正确的窗口大小,请务必在完成此操作后将窗口大小调整为预期大小。

【讨论】:

  • 这也可以:this.FormBorderStyle = FormBorderStyle.None; this.Hide();
【解决方案2】:

这是 Windows 视觉效果的一部分,可以使用SystemParametersInfo 方法进行调整。

【讨论】:

  • 感谢您的回答。但在我写的问题中,我只想禁用我的窗口的动画 - 不是系统范围的。
【解决方案3】:

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

这就是诀窍:

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

我只在 Windows 8 中测试过

【讨论】:

    【解决方案4】:

    你可以像这样改变前后的样式,这样可以防止淡出动画。

            this.FormBorderStyle = FormBorderStyle.Sizable;
            this.Show();
    
            // Do whatever
    
            this.FormBorderStyle = FormBorderStyle.Sizable;
            this.Show();
    

    【讨论】:

      猜你喜欢
      • 2017-09-23
      • 2010-11-11
      • 2011-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2014-05-08
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多