DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

コントロールの外観をビジュアルスタイル(XPスタイル)にする

ここでは、下図のようにコントロールの見た目をWindows XP以降のビジュアルスタイル(Windows XP スタイル、Luna、Whistlerスタイル)に変える方法について説明します。また、Visual Studio 2005以降ではビジュアルスタイルがデフォルトで有効になっていますが、これを無効にする方法についても説明します。

ビジュアルスタイルのコントロール

なお、ビジュアルスタイルに対応していないOSや、設定でビジュアルスタイルを無効にしている場合は、ここで紹介している方法ではビジュアルスタイルになりません。

Visual Studio 2005以降のVB.NETで、Visual Basicアプリケーションモデルを使用する方法

Visual Studio 2005以降のVB.NETを使用している場合は、次のような方法でビジュアルスタイルを有効(または無効)にすることができます。

  1. メニューの「プロジェクト」-「プロパティ」により、プロジェクトのプロパティを表示します。
  2. 「アプリケーション」タブ(デフォルトで表示される)を選択します。
  3. 「アプリケーションフレームワークを有効にする」にチェックを入れて、有効にします。
  4. 「Windowsアプリケーションフレームワークプロパティ」の「XP Visual スタイルを有効にする」にチェックを入れると、ビジュアルスタイルが有効になります。
    Windowsアプリケーションフレームワークプロパティ
  5. 以上です。

EnableVisualStylesメソッドを使用する方法

.NET Farmework 1.1以降では、Application.EnableVisualStylesメソッドを使用できます。以下にその手順を示します。

  1. .NET Framework 1.1の場合、FlatStyleプロパティがあるコントロールは、これをSystemに変更します。System.Windows.Forms.ButtonBaseクラスから派生したコントロールがこれにあたります。.NET Framework 2.0以降では、この必要がありません。
  2. エントリポイントのMainメソッドの一行目に「Application.EnableVisualStyles()」を記述します。Mainメソッドがどこにあるか分からない場合は、「Application.Run」で検索してみてください。それでも見つからない場合は、「アプリケーションのエントリポイントを自作する」を参考にしてください。
    Mainメソッドの1行目に「Application.EnableVisualStyles()」を記述した例を以下に示します。
    VB.NET
    コードを隠すコードを選択
    <STAThread()> _
    Public Shared Sub Main()
        Application.EnableVisualStyles()
        'TooBarの画像が表示されない場合は次の行を加える
        'Application.DoEvents()
        Application.Run(New Form1)
    End Sub
    
    C#
    コードを隠すコードを選択
    [STAThread]
    static void Main() 
    {
        Application.EnableVisualStyles();
        //TooBarの画像が表示されない場合は次の行を加える
        //Application.DoEvents();
        Application.Run(new Form1());
    }
    
  3. 以上です。
補足:ただしこの方法は、.NET Farmework 1.1では、多くの問題があるようなので、あまりお勧めできません。下に紹介するマニフェストファイルを使う方法をお勧めします。.NET Farmework 2.0以降では問題なく、上記の「Application.DoEvents」も必要ありません。

マニフェストファイルを使用する方法

.NET Farmework 1.0の場合は、マニフェストファイルを作成する必要があります。以下にその手順を示します。

  1. 上と同じく、FlatStyleプロパティがあるコントロールは、これをSystemに変更します。
  2. 下記の内容のテキストファイル(文字コードはUTF-8)を作り、ファイル名を「(実行ファイルのファイル名).manifest」として実行ファイルと同じフォルダに保存します。例えば、実行ファイル名が「MyApp.exe」であれば、「MyApp.exe.manifest」という名前にします。
    この時、assemblyIdentity要素のname属性の「Organization.Division.Name」の部分は、ユニークなアプリケーション名(例えば、「MyCompany.MyProduct.MyApplication」のように)に変更してください。またversion属性や、processorArchitecture属性(64-bit Windows であれば、"ia64")、description要素の値も必要に応じて変更してください。マニフェストの書き方について詳しくは、「Application Manifests」をご覧ください。
    <?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="Organization.Division.Name"
        type="win32"
      />
      <description>アプリケーションの説明</description>
      <dependency>
        <dependentAssembly>
          <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="X86"
            publicKeyToken="6595b64144ccf1df"
            language="*"
          />
        </dependentAssembly>
      </dependency>
    </assembly>
    
  3. EXEファイルを実行させると、きっとビジュアルスタイルになっているでしょう。

マニフェストファイルを実行ファイルに埋め込む

マニフェストファイルを実行ファイルに埋め込む方法は、MSDNの「Using Windows XP Visual Styles With Controls on Windows Forms」や、The Code Projectの「Windows XP Visual Styles for Windows Forms」で紹介されています。つまりは、Win32リソースとしてマニフェストファイルを実行ファイルに埋め込めばよいということです。

実行ファイルにWin32リソースを埋め込む方法は、「Win32リソースを実行ファイルに埋め込む」で詳しく説明していますので、そちらをご覧ください。

補足:Visual StudioやPlatform SDKに付属しているマニフェストツール「mt.exe」を使って、マニフェストファイルを埋め込むこともできます。例えば、プロジェクトフォルダにマニフェストファイルを置いて、Visual Studioでプロジェクトのプロパティの「ビルド後のイベントコマンドライン」(C#では「ビルドイベント」タブ、Visual Studio 2005以上のVB.NETでは「コンパイル」タブの「ビルドイベント」、Visual Studio 2003以下のVB.NETでは不可)を

mt.exe -manifest "$(ProjectDir)$(TargetFileName).manifest" -outputresource:"$(TargetPath)";1

とすると、ビルド後に自動的にマニフェストファイルを埋め込むことができます。
補足:アプリケーションをビジュアルスタイルにするためのマニフェストを自動的に作成してくれるフリーのツールが幾つか存在し、Vectorから「XP スタイル」で検索すると見つかります。さらにその中にはマニフェストを実行ファイルに埋め込んでくれるものもあります。例えば「ExeStyleXP」はEXEファイルに埋め込むことができ、コマンドラインからも起動できるようで、とても便利です。これを使えば、プロジェクトのプロパティの「ビルド後のイベントコマンドライン」(C#では「ビルドイベント」タブ、Visual Studio 2005以上のVB.NETでは「コンパイル」タブの「ビルドイベント」、Visual Studio 2003以下のVB.NETでは不可)を

ExeStyleXP.exe "$(TargetPath)"

とすると、ビルド後に自動的にマニフェストファイルを埋め込むことができます。
補足:Visual Studio 2008以降では、プロジェクトのプロパティの設定によってマニフェストを自動で埋め込むことができます。詳しくは、「UACが有効の時、アプリケーションを管理者に昇格させて起動する」をご覧ください。

デフォルトで有効になっているビジュアルスタイルを無効にする

Visual Studio 2005以降で、デフォルトで有効になっているビジュアルスタイルを無効にするには、以下のようにします。

VB.NETの場合

VB.NETの場合は、「Windowsアプリケーションフレームワークプロパティ」の「XP Visual スタイルを有効にする」に付いているチェックを外すと、無効にできます。詳しくは、上記「Visual Basicアプリケーションモデルを使用する方法」をご覧ください。

C#の場合

C#の場合は、エントリポイントメソッド(Mainメソッド)に記述されている「Application.EnableVisualStyles();」を削除します。「Application.EnableVisualStyles();」がどこに記述されているか分からない場合は、「EnableVisualStyles」で検索してみてください。

詳しくは、上記「EnableVisualStylesメソッドを使用する方法」をご覧ください。

  • 履歴:
  • 2007/2/5 .NET Framework 2.0に関する情報を追加。
  • 2010/4/26 マニフェストファイルを実行ファイルに埋め込む方法を「Win32リソースを実行ファイルに埋め込む」に移す。mt.exeの説明を追加。
  • 2014/5/19 「デフォルトで有効になっているビジュアルスタイルを無効にする」を追加。Windowsアプリケーションフレームワークプロパティの画像を追加など。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。