えムナウのプログラミングのページ

えムナウ の とどけもの

 Logo えムナウBlog@AILight
えムナウBlog@Wankuma

目次

利用状況

イメージ ギャラリー

カテゴリ

Links
 

inetaj

MSMVPロゴ
MSMVP Visual C# 2005/01-2007/12

目次

ユーザーコントロール

サンプル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 )
                {
<省略>
                }
        }
}