Где .NET или Visual Studio хранят значок формы по умолчанию? [Дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
3
задан Joan Venge 2 March 2011 в 23:56
поделиться

4 ответа

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

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

9
ответ дан Hans Passant 25 August 2018 в 17:40
поделиться

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

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

Может быть аналогичная директория для предыдущих версий VS, посмотрите, если это необходимо.

EDIT:

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

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

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

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

4
ответ дан Grant Thomas 25 August 2018 в 17:40
поделиться

Он хранится как ресурс в сборке 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();

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

3
ответ дан Roberto B 25 August 2018 в 17:40
поделиться

Вы можете просто использовать метод 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
0
ответ дан SSS 25 August 2018 в 17:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: