カスタムコントロール(デザイン時のインスタンスを判定する)
ラベルコントロール等がそうだが、コントロールはツールパレットからフォームにドロップされた時に、クラス名をベースとした、仮のNameプロパティが設定されて、そのNameプロパティが初期のTextプロパティとコントロール上に描画される。Controlから派生したコントロールを作っていて、これと同じ動作をしたかったのだが、見本になる実装が無いので適当に書いてみた。
protected override void OnPaint(PaintEventArgs e) { Graphics gr = e.Graphics; /* 自身の描画処理を記述 */ if ( this.Site != null && this.Site.DesignMode ) { TextRenderer.DrawText(gr, this.Text, this.Font, new Point(5, 5), this.ForeColor); } }
Textプロパティを描画するのはデザイン時だけなのだが、この「自身がインスタンス化されたのが、デザイン時なのかランタイム時なのか」という判定をどう書いて良いのかが全く解らなかった。取り敢えずSiteプロパティで判定してみたが、これで良いかどうか全く自信が無い。