Application.EnableVisualStyles() 有什么作用吗?

问题描述 投票:0回答:5

我对于理解一门新语言非常挑剔,最近我开始学习 C#。因此,我想知道当我创建新应用程序时发生的一切 - 在本例中是新的 Windows 窗体应用程序。我创建了一个,并获得了一些从 Visual Studio 生成的代码,其中一行是

Application.EnableVisualStyles()

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

c# visual-studio-2008
5个回答
47
投票

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

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

Application.EnableVisualStyles();

With visual themes

// Application.EnableVisualStyles();

Without visual themes

如果其他应用程序中的按钮看起来像第二个屏幕截图,那么无论您是否使用

Application.EnableVisualStyles()
,您总是会看到没有主题的按钮,因为它们被操作系统关闭 - 重新打开它们的方法取决于您的操作系统,但是通常涉及进入性能>>视觉效果对话框。


14
投票

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

enter image description here


12
投票

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

您可能也会对这个答案感兴趣:我应该在终端服务上调用 Application.EnableVisualStyles() 吗?


4
投票

这是我从 Microsoft 支持部门收到的一个模糊的应用程序崩溃查询的回复:

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

要解决此问题,您需要更改应用程序以使其选择 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 视觉样式”复选框来选择启用此功能。


0
投票

不再需要EnableVisualStyles()。

从 .Net Framework 4.x.x 转换到 .NET 6 时,不再需要调用 Application.EnableVisualStyles()。

Program.cs::Main() 中的新 .NET 6 引导程序调用 ApplicationConfiguration.Initialize(),后者会自动调用 EnableVisualStyles() 和 SetCompatibleTextRenderingDefault()。

//Program.cs
static void Main()
{
   ApplicationConfiguration.Initialize();
   Application.Run(new Form1());
}

//ApplicationConfiguration.Initialize()
public static void Initialize()
{
    global::System.Windows.Forms.Application.EnableVisualStyles();
    global::System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
    global::System.Windows.Forms.Application.SetHighDpiMode(HighDpiMode.SystemAware);
}

C#、VS2022、.NET 6

© www.soinside.com 2019 - 2024. All rights reserved.