在.NET1.1版本中,引入了EnableVisualStyles
方法,它允许WinForms应用程序轻松地采用Windows XP风格的新外观和感觉。然而,这种方法在实现上存在一个bug,它会影响存储在ImageList
组件中的图像以及Windows公共控件,例如TreeView
或Toolbar
类。具体来说,如果调用了EnableVisualStyles
,那么所有的图像都会从工具栏、树形视图和列表视图中消失。
为了重现这个bug,可以按照以下步骤操作:
Form1
中添加一个Toolbar
和一个ImageList
。ImageList
中添加一个图像,并向Toolbar
中添加一个按钮。Main
方法中,在调用Application.Run
之前,添加一个调用Application.EnableVisualStyles
的语句。当在启用了视觉样式的Windows XP上运行应用程序时,会发现工具栏按钮上没有图像。
通过在Google群组中搜索,发现了一些关于这个问题的讨论,以及一个似乎有效且在应用程序中没有引起任何问题的解决方法。(要了解更多关于这个解决方法的信息,请)
在EnableVisualStyles
之后立即调用Application.DoEvents
,似乎可以修复这个问题。究竟是如何或为什么有效,没有人知道。最有可能的原因是它导致通过PostMessage
发送的消息在创建第一个基于WinForms的窗口之前被正确地发送到指定位置。
因此,解决方法的代码如下:
void Main() {
Application.EnableVisualStyles();
Application.DoEvents();
Application.Run(new Form1());
}