Application.EnableVisualStyle(),并将控件的 flat style 设为 system,大部分控件都会变为 xp 风格。如果还不满意,只好在 owner draw 中自己画了

解决方案 »

  1.   

    这里有很多XP风格的自画控件,是原代码的,楼主可以下载来看看:
    http://www.codeproject.com/
      

  2.   

    Application.EnableVisualStyle()微软自己说的小技巧
      

  3.   

    Application.EnableVisualStyle()就可以。
    http://www.cnblogs.com/mack/archive/2004/08/15/33523.aspx
      

  4.   

    轻而易举拥有xp风格的界面      Windows XP发布时,我们中许多人都为她华丽漂亮的界面折服和兴奋。然而,.NET1.0发布时,我们中又有许多人,包括我自己,对它不支持XP风格感到大失所望。可事实是,在Windows XP(只限于WindowsXP)里.NET支持XP风格,只是还要您做一点小工作。     这篇文章主要参考了http://www.codeproject.com/csharp/dotnetvisualstyles.asp
         跟随下面的步骤,使您的程序拥有XP风格的界面,GO!1. 新建一个Windows应用程序,然后打开AssemblyInfo.cs,修改一下内容,下面的是示例代码:
    using System.Reflection;
    using System.Runtime.CompilerServices;[assembly: AssemblyTitle("abc")]
    [assembly: AssemblyDescription("abc")]
    [assembly: AssemblyConfiguration("")]
    [assembly: AssemblyCompany("")]
    [assembly: AssemblyProduct("")]
    [assembly: AssemblyCopyright("")]
    [assembly: AssemblyTrade("")]
    [assembly: AssemblyCulture("")]  
    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyDelaySign(false)]
    [assembly: AssemblyKeyFile("")]
    [assembly: AssemblyKeyName("")]2. 往项目添加新项。新添加一个XML文件,将文件命名为 [您的程序名].exe.manifest,[您的程序名]指的是在 ..\bin\debug 文件夹里生成的可执行程序名 。文件的内容示例如下:您只要根据您在AssemblyInfo.cs里所作的设置修改 version="1.0.0.0", name="abc", <description>abc</description> 这几个值就可以了。<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly 
        xmlns="urn:schemas-microsoft-com:asm.v1" 
        manifestVersion="1.0">
        <assemblyIdentity 
            version="1.0.0.0" 
            processorArchitecture="X86" 
            name="abc"
            type="win32" />
        <description>abc</description>
        <dependency>
            <dependentAssembly>
                <assemblyIdentity 
                    type="win32" 
                    name="Microsoft.Windows.Common-Controls" 
                    version="6.0.0.0" 
                    processorArchitecture="X86" 
                    publicKeyToken="6595b64144ccf1df" 
                    language="*" /> 
            </dependentAssembly> 
        </dependency> 
    </assembly>重新编译程序。 注意,从ButtonBase,GroupBox和Label继承下来的组件必须将FlatStyle属性设为System。3. 将 [您的程序名].exe.manifest  文件添加到程序的可执行文件(1)菜单-->文件-->打开,打开..\bin\debug\[您的程序名].exe,现在您可以看到一个资源浏览树;
    (2)右击根目录[您的程序名],单击"添加资源...";
    (3)在跳出的对话框中单击“自定义...”;
    (4)将资源类型命名为RT_MANIFEST,确定;
    (5)双击资源树的RT_MANIFEST下的项(一般情况下是101),Copy 文件 [您的程序名].exe.manifest 的内容,粘贴在打开的文件中,粘贴的结果是二进制形式(结果有点奇怪,不用理会);
    (6)保存,然后将101项的ID改为1,再保存。注意,不要重新对程序进行编译。现在,重新打开您的程序,怎么样,界面应该不错吧。原理:
            问题的关键在于comctl32.dll。您搜索一下您的计算机,将发现有两个comctl32.dll。组件的外观就与这两个DLL中的特定资源相联系,它们提供特定的资源用于组件客户区域的绘制。对于继承于ButtonBase,GroupBox和Label的组件,将它们的FlatStyle属性设为System的目的也是为了让系统对组件进行绘制。
            默认情况下,系统将使用..\Windows\System32目录下的DLL,您需要做的工作就是告诉系统使用另一个DLL,这就是将 [您的程序名].exe.manifest 文件 添加到可执行文件的目的。
            下面是支持XP风格的组件完整列表:
             Label,TextBox, RichTextBox, HScrollBox, VScrollBox, ProgressBar, TabControl, MainMenu, ComboBox, ContextMenu, DataGrid, ListBox, ListView, TreeView, DataTimePicker, MonthCalendar, Splitter,TrackBar, StatusBar, ToolBar
      

  5.   

    嗯,有两种方法,一个就是EnableVisualStyle()还有一个就是用上面提到的manifest,
    不过.NET Framework1.1中EnableVisualStyle有bug,这个微软已经承认了。这个bug会造成模式窗口无法正常关闭的错误。在2.0中这个bug将被修复。
    所以用manifest会更好一些,不过就是麻烦了点。
      

  6.   

    呵呵,看来,我的应用出现莫名其妙的异常就是这个函数引起的了。不过,现在关闭了,因为使用了LISTVIEW来使用缩略图列表时,发现不能显示图片,而且工具栏也不显示图片。
      

  7.   

    http://www.mctainsh.com/Csharp/XpControlsInCS.aspx
      

  8.   

    不过这种方式只有在xp下才能有效果,建议你找一些第三方的控件来实现。
    http://www.bcgsoft.com/bcgcontrolbar.htm
      

  9.   

    cancersyf(fengzhimei) 说的没错,的确上述方法也只有在下才有效,各位谁还知道这种比较好的第三方的控件呢?推荐一下!
      

  10.   

    Application.EnableVisualStyle(),并将控件的 flat style 设为 system,大部分控件都会变为 xp 风格
      

  11.   

    Application.EnableVisualStyle();
    Application.DoEvents();//加上这句后,楼上所说的bug就不会出现。该bug在2.0中已修复