是的,這很煩人。但是Icon.ExtractAssociatedIcon的建議答案的問題是,它將檢索32x32圖標,然後在窗體窗口或任務欄上縮減爲16x16圖標,除非您的32x32圖標構造得非常巧妙,否則這看起來很糟糕。
我做它的方式是與互操作(把第一行中的窗體構造函數):
this.Icon = ExtractSmallIconFromLibrary(Application.ExecutablePath);
...
public static Icon ExtractSmallIconFromLibrary(string file) {
IntPtr[] reficon = new IntPtr[1];
int nextracted = ExtractIconEx(file, 0, null, reficon, 1);
if (nextracted < 1)
return null;
Icon unmanaged_icon = Icon.FromHandle(reficon[0]);
Icon icon = (Icon)unmanaged_icon.Clone();
DestroyIcon(unmanaged_icon.Handle);
return icon;
}
[DllImport("Shell32", CharSet = CharSet.Auto)]
extern static int ExtractIconEx(
[MarshalAs(UnmanagedType.LPTStr)]
string lpszFile,
int nIconIndex,
IntPtr[] phIconLarge,
IntPtr[] phIconSmall,
int nIcons
);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
extern static bool DestroyIcon(IntPtr handle);
但這並不是很大,或者說,既然你做想 32×32的圖標像Alt-Tab圖標列表。所以你真的需要提取整個圖標,這是一個更大的工作。也許有一種直接的方法可以將兩個圖標組合成一個。或者你可以像這樣做codeproject程序,它首先用一大堆代碼提取整個圖標。
爲什麼不使用繼承?在一個自定義Form類中定義圖標並在任何地方使用它。 – 2010-07-31 14:01:55
我記得我的Delphi編程時間... self.Icon = Application.Icon; :P ...在.NET中太難了:D – Learner 2012-07-26 20:31:50
[任何從資源中使用圖標的簡單方法?](http:// stackoverflow。com/questions/5656809/any-easy-way-to-use-icons-from-resources) – KyleMit 2015-02-12 20:46:56