A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
Он хранится как ресурс в сборке System.Windows.Forms.dll. Вы можете получить копию с Reflector. Откройте сборку, откройте узел «Ресурсы», вплоть до «wfc.ico». Щелкните правой кнопкой мыши, Сохранить как. Не знаете, почему вы хотели бы использовать его, учитывая, что он по умолчанию.
Вы устанавливаете пользовательский значок для своего приложения с помощью Project + Properties, вкладки Application, настройки значков. Каждая форма имеет свой собственный значок.
Если у вас установлена 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
.
То, что я не вижу в работе по желанию, просто перезаписывает эти файлы, пытаясь применить глобальное изменение .
Он хранится как ресурс в сборке 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();
Эта функция затем переопределит значок по умолчанию со значком, указанным в ваших свойствах приложения, значком вашего исполняемого файла.
Вы можете просто использовать метод 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