默认图标嵌入在winforms dll 中 - 查看反射器 ( DefaultIcon
) 它是:
defaultIcon = new Icon(typeof(Form), "wfc.ico");
那里没有检查另一个常见位置的魔法,所以如果不更改代码就无法做到这一点。
你总是可以通过基于场的反射来拥抱黑暗的力量吗?注意:这是hacky和脆弱的。在你自己的头上!但它有效:
[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()
与您现有的代码相去甚远。