默认图标嵌入在winforms dll中 - 通过反射(DefaultIcon
)查看,它是:
defaultIcon = new Icon(typeof(Form), "wfc.ico")
这里没有魔法可以检查其他常见位置,因此您无法在不更改代码的情况下执行此操作。
您可以始终通过基于字段的反射来拥抱黑暗力量?注意:这是hacky和脆弱的。自行承担风险!但它起作用:
[STAThread]
static void Main() {
typeof(Form).GetField("defaultIcon",
BindingFlags.NonPublic | BindingFlags.Static)
.SetValue(null, SystemIcons.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 = ...
return frm;
}
然后,不是这样写:
using(var frm = new MySpecificForm()) {
// common init code
}
Something like:
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 = ...
}
return form;
}
并且
using(var frm = new MySpecificForm().CommonInit()) {
// ready to use
}
这只需要一个
.CommonInit()
即可与您现有的代码兼容。