问一个可能比较愚蠢的问题。对于 C#/VB.NET:
我们在使用 .Net 自带控件时,这些控件多是简陋的传统 3D 样式,而不是比较美观的 XP 样式。现在有一些说写个 .manifest 文件的方法可以让编译后的应用程序的某些控件(TextBox, ComboBox,ProgressBar 等等)变成 XP 样式,但是却无法让同样十分常用的 Button 和 CheckBox 等控件变为 XP 样式,这些控件在窗体设计器里仍然是简陋的传统 3D 样式——非常不谐调。当然似乎 VB6 写出来的程序用 .manifest 就可以让所以控件完全 XP 风格化。网上有不少 XP 样式控件,但是使用他人的控件多少有一些不自在——要么要求注册,要么必须在自己的应用程序中加上这些控件;即使提供了源代码让我们可能自己编译到程序里,或者重写 OnDraw 事件可能可以实现 XP 风格化,但是这毕竟要耗费额外的代码。 有没有谁能够提供一个比较好的解决方案,一劳永逸的,只要将控件 VS .NET 默认的窗体控件工具箱内将控件拖到窗体上,那个控件就是 XP 样式;或者让那些控件本来就是 XP 样式(工具栏里显示的就是 XP 风格控件)。听说 VS 2005.Net 用这样的控件库,是真的吗?用 VS 2005.NET 自身控件编译的程序是 XP 样式的吗??怎么让 VS 2003.NET 也实现相同功能?
我们在使用 .Net 自带控件时,这些控件多是简陋的传统 3D 样式,而不是比较美观的 XP 样式。现在有一些说写个 .manifest 文件的方法可以让编译后的应用程序的某些控件(TextBox, ComboBox,ProgressBar 等等)变成 XP 样式,但是却无法让同样十分常用的 Button 和 CheckBox 等控件变为 XP 样式,这些控件在窗体设计器里仍然是简陋的传统 3D 样式——非常不谐调。当然似乎 VB6 写出来的程序用 .manifest 就可以让所以控件完全 XP 风格化。网上有不少 XP 样式控件,但是使用他人的控件多少有一些不自在——要么要求注册,要么必须在自己的应用程序中加上这些控件;即使提供了源代码让我们可能自己编译到程序里,或者重写 OnDraw 事件可能可以实现 XP 风格化,但是这毕竟要耗费额外的代码。 有没有谁能够提供一个比较好的解决方案,一劳永逸的,只要将控件 VS .NET 默认的窗体控件工具箱内将控件拖到窗体上,那个控件就是 XP 样式;或者让那些控件本来就是 XP 样式(工具栏里显示的就是 XP 风格控件)。听说 VS 2005.Net 用这样的控件库,是真的吗?用 VS 2005.NET 自身控件编译的程序是 XP 样式的吗??怎么让 VS 2003.NET 也实现相同功能?
只能当程序在xp上运行时才能起作用,如果在win2000上 ,就要自己动手封装了。
可以到www.codeproject.com上找找,有不少这类控件
有没有全局设置效果等同 Application.EnableVisualStyles(); 的?这类控件我有很多……
2) Include the same name manifest file in your project
3) If above doesn't work, use 3rd party control (no other choice, like NumericUpDown)
>只能当程序在xp上运行时才能起作用,如果在win2000上 ,就要自己动手封装了。
>可以到www.codeproject.com上找找,有不少这类控件千万不要使用Application.EnableViusalStyles(),这个方法是vs.net中的一个重要bug,网上已经有很多关于这个问题的文章。我就不多说了。
将 Windows XP 可视样式应用于 Windows 窗体应用程序从 System.Windows.Forms.ButtonBase 类派生的控件(Button、RadioButton 和 CheckBox 控件)和 GroupBox 控件具有属性 FlatStyle,该属性指示应该如何绘制控件。如果 FlatStyle 属性被设置为 System,则该控件的外观将由用户的操作系统确定。此设置使具有此属性的控件以 Windows XP 的方式绘制自己。请注意,某些 Windows 窗体控件(Label、LinkLabel、DomainUpDown、NumericUpDown 和 CheckedListBox 控件)在所有操作系统上的外观都是相同的。将可视样式应用于窗体 1、对于具有 FlatStyle 属性的控件(参见上面的解释),将此属性设置为 System。
右击该窗体并选择“查看代码”。 2.a、在 Visual Basic 中,将以下代码添加到窗体的类中。以下代码片段假定窗体名称为 Form1。 ' Visual Basic
Shared Sub Main()
Application.EnableVisualStyles()
Application.Run(New Form1)
End Sub2.b、在 Visual C# 中,找到 Main() 方法并对其进行修改,以便它具有以下一行粗体代码。以下代码片段假定窗体名称为 Form1。 // C#
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}2.c、在 Visual C++ 中,找到 _tWinMain 过程并对其进行修改,以便它具有以下一行粗体代码。以下代码片段假定窗体名称为 Form1。
// C++
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
Application::EnableVisualStyles();
Application::Run(new Form1());
return 0;
}
2.d
注意 如果窗体上有一个 ImageList 控件,则确保在调用 Application.Run() 之前应包括以下一行代码。
' Visual Basic
Application.DoEvents()// C#
Application.DoEvents();// C++
Application::DoEvents();3.VB 在 Visual Basic 中:
·在“解决方案资源管理器”中,右击项目并选择“属性”。
·在项目的属性页对话框中,将“启动对象”字段设置为“Sub Main”。
·单击“应用”。 此时,您的窗体和所有其控件都将用运行时应用的可视样式显示。
经过测试,所有控件都可以 XP 风格化。不过这是权宜之计,我想了解一个一劳永逸的方法。分是会给的,不过要等这个“一劳永逸”的方法出来或者被证明不可能先。