Где найти значок Winforms по умолчанию в Windows? - PullRequest
3 голосов
/ 03 марта 2011

Я предполагаю, что это общий ресурс где-то в Windows. Вместо того, чтобы делать копию для каждого приложения, есть ли способ использовать этот значок так же, как его используют все приложения Winforms?

Как это указано для приложений Winforms по умолчанию? Я не вижу ссылок на значки в коде или настройках проекта. Просто он использует «значок по умолчанию».

Ответы [ 4 ]

9 голосов
/ 03 марта 2011

Хранится как ресурс в сборке System.Windows.Forms.dll. Вы можете получить копию с Reflector. Откройте сборку, откройте узел Ресурсы, вплоть до "wfc.ico". Щелкните правой кнопкой мыши, Сохранить как. Не уверен, почему вы хотите его использовать, учитывая, что это значение по умолчанию.

Вы устанавливаете пользовательский значок для своего приложения с помощью Project + Properties, вкладки Application, Icon icon. Каждая форма имеет свое свойство Icon.

4 голосов
/ 03 марта 2011

Если у вас установлена ​​Visual Studio 2010, то существует большая коллекция значков (возможно, включая значки приложений), проверьте следующий каталог:

%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033

Возможно, существует аналогичный каталог дляпредыдущие версии VS, посмотрите, если нужно.

РЕДАКТИРОВАТЬ:

При выполнении поиска в папке разархивированного файла для app есть два заметных результата:

Application.ico и ApplicationGeneric.ico + его * .png аналог.

Если у вас VS 2010 и любые из значков здесь подходят, яполагайте, что вам не нужно копировать один файл - вы должны иметь возможность включать файл косвенно (как общий / связанный файл) при добавлении с использованием диалога Existing Item...;Вы делаете это, выбирая стрелку рядом с кнопкой Add и выбирая опцию Add As Link.

То, что я не вижу, работая как нужно, просто перезаписывает эти файлы в попытке применить глобальное изменение.

3 голосов
/ 18 августа 2014

Хранится как ресурс в сборке System.Windows.Forms.dll. Вы можете получить копию с отражением следующим образом:

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();

Эта функция затем переопределит значок по умолчанию на значок, указанный в свойствах вашего приложения, значок вашего исполняемого файла.

0 голосов
/ 24 ноября 2017

Вы можете просто использовать метод Save:

C #:

string IcoFilename = "C:\\Junk\\Default.ico";
using (System.IO.FileStream fs = new System.IO.FileStream(IcoFilename, System.IO.FileMode.Create))
{
  this.Icon.Save(fs);
}

Visual Basic:

Dim strFilename As String = "C:\Junk\Default.ico"
Using fs As New System.IO.FileStream(strFilename, IO.FileMode.Create)
  Me.Icon.Save(fs)
End Using
...