Значок по умолчанию встроен в dll winforms - глядя на отражатель (DefaultIcon
), это:
defaultIcon = new Icon(typeof(Form), "wfc.ico");
Там нет магии, которая проверяет другое общее место, поэтому вы не можете сделать это без изменения кода.
Вы всегда могли бы принять силы тьмы с помощью полевого отражения? Примечание: это хакерский и хрупкий. На твою голову! Но это работает:
[STAThread]
static void Main() {
// pure evil
typeof(Form).GetField("defaultIcon",
BindingFlags.NonPublic | BindingFlags.Static)
.SetValue(null, SystemIcons.Shield);
// all forms now default to a shield
using (Form form = new Form()) {
Application.Run(form);
}
}
сделать это правильно; два распространенных варианта;
- базовый
Form
класс с набором иконок
- фабричный
Form
метод - возможно, что-то вроде:
код:
public static T CreateForm<T>() where T : Form, new() {
T frm = new T();
frm.Icon = ...
// any other common code
return frm;
}
Тогда вместо:
using(var frm = new MySpecificForm()) {
// common init code
}
Что-то вроде:
using(var frm = Utils.CreateForm<MySpecificForm>()) {
}
Конечно - это не намного красивее! Другим вариантом может быть метод расширения C # 3.0, возможно, в виде свободного API:
public static T CommonInit<T>(this T form) where T : Form {
if(form != null) {
form.Icon = ...
//etc
}
return form;
}
и
using(var frm = new MySpecificForm().CommonInit()) {
// ready to use
}
Это всего лишь .CommonInit()
от вашего существующего кода.