目次
ユーザーコントロール
サンプル6 BeginInitとEndInitの挿入
ツールボックスから色々なツールをFormに貼り付けた状態で InitializeComponentを見てみると、BeginInit/EndInit
のペアが作成されています。
このペアを発生させるためには ISupportInitialize を派生元に加えます。
ISupportInitialize の機能を達成するために BeginInit/EndInit メソッドを実装します。
InitializeComponent
の中で、プロパティはアルファベット順に初期化されますので、初期化順によって問題が発生する場合があります。
そのため、BeginInit メソッドと EndInit メソッド の間ではどのようにプロパティは変更されてもいいように設計します。
必要であればBeginInit メソッドと EndInit メソッド の間表示の Refresh
を停止し、EndInitメソッドで再描画します。
public class SpreadControl : System.Windows.Forms.UserControl ,ISupportInitialize
{
private bool _init ;
private object[,] _data ;
private object[,] _initdata ;
<省略>
private void InitializeComponent()
{
this.Name = "SpreadControl";
this.Paint += new System.Windows.Forms.PaintEventHandler(this.SpreadControl_Paint);
}
public SpreadColumn[] Column
{
get
{
return _data ;
}
set
{
if ( _init == false )
{
_data = value ;
}
else
{
_initdata = value ;
}
}
}
public void BeginInit()
{
_init = true ;
}
public void EndInit()
{
_data = initdata ;
_init = false ;
Refresh() ;
}
private void SpreadControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
if ( _init == false )
{
<省略>
}
}
}



