Он хранится как ресурс в сборке System.Windows.Forms.dll. Вы можете получить копию с отражением как folow:
public static class FormUtils
{
private static Icon _defaultFormIcon;
public static Icon DefaultFormIcon
{
get
{
if (_defaultFormIcon == null)
_defaultFormIcon = (Icon)typeof(Form).
GetProperty("DefaultIcon", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null, null);
return _defaultFormIcon;
}
}
public static void SetDefaultIcon()
{
var icon = Icon.ExtractAssociatedIcon(EntryAssemblyInfo.ExecutablePath);
typeof(Form)
.GetField("defaultIcon", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)
.SetValue(null, icon);
}
}
public static class FormExtensions
{
internal static void GetIconIfDefault(this Form dest, Form source)
{
if (dest.Icon == FormUtils.DefaultFormIcon)
dest.Icon = source.Icon;
}
}
Итак, как вы можете видеть в коде, у вас есть тот же значок Icon.Handle. Та же ссылка. Form.DefaultIcon является внутренним ленивым загруженным статическим свойством в классе Form.
Вы также можете переопределить значок Winforms по умолчанию для вашего приложения. В Program.cs я использую:
FormUtils.SetDefaultIcon();
Эта функция затем переопределит значок по умолчанию со значком, указанным в ваших свойствах приложения, значком вашего исполняемого файла.