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

フォームの左上(コントロールボックス)やタスクバーに表示されるアイコンを変更する

Form.Iconプロパティを変更する

フォームのForm.Iconプロパティを設定すると、フォームのタイトルバーの左(コントロールボックス)に表示されるアイコンと、タスクバーに表示されるアイコンを変更することができます。

Visual StudioのフォームデザイナでIconプロパティを設定する場合は、あらかじめアイコンのICOファイルを用意しておき、プロパティウィンドウでフォームのIconプロパティにそのICOファイルを設定します。(この時、アイコンはフォームのリソースに自動的に追加されます。)

自分でコードを書いてIconプロパティを設定する場合は、あらかじめ用意しておいたICOファイルを読み込んでIconオブジェクトを作成するか、アイコンをリソースとしてプロジェクトに追加しておくかします(通常は、リソースとした方が良いでしょう)。リソースについては、「Visual Studioでリソースを管理する」で詳しく説明しています。

以下の例では、ICOファイルで用意したアイコン(C:\test\1.ico)をフォーム(自分自身)のIconプロパティに設定しています。

VB.NET
コードを隠すコードを選択
'フォームのアイコンを設定する
Me.Icon = New System.Drawing.Icon("C:\test\1.ico")
C#
コードを隠すコードを選択
//フォームのアイコンを設定する
this.Icon = new System.Drawing.Icon(@"C:\test\1.ico");

タスクバーのアイコンが変更されない時は

フォームのForm.ShowIconプロパティがFalseの時は、コントロールボックスが表示されず、タスクバーに表示されるアイコンもForm.Iconプロパティとは違ったものになります。ShowIconプロパティは、デフォルトでTrueです。このプロパティは、.NET Framework 2.0で追加されました。

また、ShowIconプロパティがTrueであったとしても、フォームのForm.FormBorderStyleプロパティがFixedDialogの時は、やはりコントロールボックスが表示されず、タスクバーに表示されるアイコンもForm.Iconプロパティとは違ったものになります。

補足:ShowIconプロパティがFalse、またはFormBorderStyleプロパティがFixedDialogの時にタスクバーに表示されるアイコンは、私が試した限りでは、Windows XPの時は、「アプリケーションのアイコンを変更する」で紹介している方法で設定されたアプリケーションのアイコン(ただしVisual Studioで実行している時は、既定のアイコン)になりました。Windows 8.1の場合は、アプリケーションのアイコンが変更されていたとしても、既定のアイコンになりました。

すべてのフォームのアイコンを変更する

一度ですべてのフォームのアイコンを変更する方法は用意されていません。よって、自分で一つ一つのフォームのアイコンを変更するか、Iconプロパティを変更したフォームクラスを基にしてすべてのフォームを作成するか、などといった方法しかありません。

しかし、裏技的な方法が、「Change Default Winform Icon Across Entire App」で紹介されています。これによると、Iconプロパティにデフォルトで使用されるアイコンがFormクラスのdefaultIconフィールドに設定されているため、これを変更すれば、デフォルトのアイコンを変更できるということです。ただしdefaultIconフィールドはプライベートですので、この値を変更するには、リフレクションを使用することになります。

この方法はプライベートなフィールドを変更するため、言うまでもありませんが、何の保証もありませんし、それなりに危険でもあります。

defaultIconフィールドを「C:\test\1.ico」に変更する例を示します。このコードを実行した後で作成されたフォームのIconプロパティは、デフォルトで「C:\test\1.ico」になります。もし一番初めに表示されるフォームにも適用されるようにするならば、エントリポイント(詳しくは、「アプリケーションのエントリポイントを自作する」)でフォームが作成される前にこのコードを記述してください。

VB.NET
コードを隠すコードを選択
'FormクラスのdefaultIconフィールドを変更する
GetType(Form).GetField("defaultIcon", _
    System.Reflection.BindingFlags.NonPublic Or _
    System.Reflection.BindingFlags.Static).SetValue( _
        Nothing, New System.Drawing.Icon("C:\test\1.ico"))
C#
コードを隠すコードを選択
//FormクラスのdefaultIconフィールドを変更する
typeof(Form).GetField("defaultIcon",
    System.Reflection.BindingFlags.NonPublic |
    System.Reflection.BindingFlags.Static).SetValue(
        null, new System.Drawing.Icon(@"C:\test\1.ico"));

Change Default Winform Icon Across Entire App」にはこの他に拡張メソッドを使用した方法なども紹介されており、参考になります。

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

  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。