基本 Form でアイコンを共通化
アプリケーションで複数フォームがある場合、個々のフォームにアイコンを設定するとリソースファイルに重複して登録される。
そこで、アイコンをロードする基本 Form を作って継承させる方法があるが、以下で問題点が指摘されている。
アイコンをベースクラスで設定すると・・・
でもね、FormAやFormBをデザイナで編集すると、そのアイコンが内部に取り込まれちゃうんですよ。
そのたびにIconプロパティにカーソルを合わせてDeleteですよ。
解決方法
Icon プロパティを隠蔽して、デザインモードでは null を返すようにする。*1
// Default Icon Form sample for C# public class BaseForm : System.Windows.Forms.Form { private bool useDefaultIcon = true; private System.Drawing.Icon defaultIcon = null; public BaseForm() { Stream iconStream = System.Reflection.Assembly.GetExecutingAssembly() .GetManifestResourceStream("Application.ico"); if (null != iconStream) { base.Icon = defaultIcon = new Icon(iconStream); } } public new System.Drawing.Icon Icon { get { return (DesignMode && useDefaultIcon) ? null : base.Icon; } set { useDefaultIcon = (null == value); base.Icon = useDefaultIcon ? defaultIcon : value; } } }
*1:デザインモードは Component.DesignMode プロパティで判別可能。