Application.EnableVisualStyles() 有啥作用吗?

Posted

技术标签:

【中文标题】Application.EnableVisualStyles() 有啥作用吗?【英文标题】:Does Application.EnableVisualStyles() do anything?Application.EnableVisualStyles() 有什么作用吗? 【发布时间】:2011-10-09 11:55:18 【问题描述】:

在理解一门新语言方面我非常挑剔,最近我开始学习 C#。所以我想知道当我创建一个新的应用程序时发生的一切——在本例中是一个新的 Windows 窗体应用程序。我创建了一个并从 Visual Studio 获得了一些生成的代码,其中一行是 Application.EnableVisualStyles()

我在 MSDN 上做了一些研究,发现了这篇文章:Application.EnableVisualStyles()。我执行了他们提出的示例,期望当我注释掉所述行时按钮不可见。没啥事儿!似乎什么都没有改变。我知道这是一个非常基本的例子,但不应该有所改变吗?如果这在 Main() 过程中如此重要,那么我到底在做什么?

【问题讨论】:

+1 当有人不得不询问某个特定 API 有什么作用时,您就知道 API 文档很糟糕。 【参考方案1】:

是的,但您需要在您的操作系统中打开某些设置,否则您将无法看到它是什么。

以下是我系统上同一应用程序的一些屏幕截图:

Application.EnableVisualStyles();

// Application.EnableVisualStyles();

如果其他应用程序中的按钮看起来像第二个屏幕截图,那么无论您是否使用Application.EnableVisualStyles(),您都会看到未主题化的按钮,因为它们已被操作系统关闭 - 重新打开它们的方式取决于您的操作系统,但通常涉及到 Performance >> Visual Effects 对话框。

【讨论】:

【参考方案2】:

它会打开滚动条和按钮等更具创意的库存图。如果为 false,您将获得纯灰色库存控件等。

【讨论】:

【参考方案3】:

EnableVisualStyles() 并不意味着在运行该方法时按钮现在可以直观地绘制出来,而是意味着它将使用内置的 Windows 主题来设置控件样式,而不是使用“经典 Windows”的外观和感觉。如果您的计算机在没有样式的情况下运行,那么您不会注意到任何差异。

这个答案可能你也很感兴趣:Should I call Application.EnableVisualStyles() on terminal services?

【讨论】:

【参考方案4】:

这是我从 Microsoft 支持部门收到的关于应用程序崩溃询问的回复:

要点是崩溃是 Windows 操作系统附带的 comctl32.dll(Windows 通用控件)版本 5.0 中的一个已知错误。此错误不会在通用控件的 5.0 版中得到修复,因为该版本适用于 Windows XP 之前存在的应用程序。此后,它已在 comctl32.dll 的 6.0 版中得到修复,该版本包含在 Windows XP 及更高版本中。请注意,两个版本的 comctl32.dll(5.0 和 6.0)都包含在自 Windows XP 以来的每个 Windows 版本中。旧版本只是为了向后兼容非常旧的应用程序。

要解决此问题,您需要更改应用程序以使其选择 comctl32.dll 的 6.0 版。在 Windows 窗体应用程序中,这是通过在应用程序启动时调用 Application.EnableVisualStyles 方法来完成的。如果您在 C# 项目中进行开发,则可以通过在应用程序入口点中的 Application.Run 调用之前添加调用来执行此操作。例如:

    [STAThread]
    static void Main()
    
        Application.EnableVisualStyles();   //Add this line
        Application.Run(new Form1());
    

如果您在 Visual Basic .Net 项目中,您可以通过转到您的项目属性,然后在应用程序属性页上选择“启用应用程序框架”和“启用 XP 视觉样式”复选框来选择加入。

【讨论】:

以上是关于Application.EnableVisualStyles() 有啥作用吗?的主要内容,如果未能解决你的问题,请参考以下文章