デフォルトのアイコンはwinformsdllに埋め込まれています-リフレクター(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);
}
}
それを正しく行うために; 2つの一般的なオプション。
- アイコンが設定されている基本
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>()) {
}
もちろん、それはそれほどきれいではありません!別のオプションは、おそらく流暢なAPIとしてのC#3.0拡張メソッドである可能性があります。
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()
、既存のコードから少し離れています。