C#のWinFormでアプリケーションアイコンを設定する方法

コンピュータ

アイコンをリソースで埋め込むべきだと思いますが、dotnet.exeでリソースを扱う方法を知らないので、.exeファイルのアイコンを読み込むようにしてみました。

まずプロジェクトファイル(.csproj)の<PropertyGroup>にアイコンのパスを以下のようにセットする。

<ApplicationIcon>アイコンのフルパス</ApplicationIcon>

これで生成される.exeファイルにアイコンがセットされます。エクスプローラーから.exeファイルを見るとアイコンが表示されていることから、アイコンがexeファイルに埋め込まれていると思われます。

次に.exeファイルのアイコンを参照しアプリケーションアイコンにします。

public partial class Form1 : Form
{
    // コンストラクタ
    public Form1()
    {
        InitializeComponent();

        // アプリケーションアイコン
        var exePath = Environment.ProcessPath;
        if (exePath is not null)
        {
            var icon = System.Drawing.Icon.ExtractAssociatedIcon(exePath);
            this.Icon = icon;
        }

~ 移行省略 ~

Environment.ProcessPath;に実行している.exeのフルパスが返ります。
System.Drawing.Icon.ExtractAssociatedIcon()で.exeファイルからアイコンを取得します。
this.Icon = icon;でフォームにアイコンをセットしています。

コメント