Top / .NET備忘録 / 07.Form / 01.Load ステートメント

Form.SetVisibleCore のソースを見ると、VB6 の Load ステートメントと同じことをやるには、CreateHandle、OnCreateControl、OnLoad を実行しておけばよいことがわかります。

表示する際、再度実行されないよう、フラグ管理します。

この2つのメソッドを実行したかどうかは、Form の中で、Private なプロパティ(CalledCreateControl、CalledOnLoad)で管理されているので、Reflection を使ってアクセスできないこともないのですが、Private なプロパティを更新するのは危険なのでやめておきます。

Form を継承して、VBForm というクラスを作り、Load ステートメントから呼ばれる LoadInternal メソッドを作ります。

 using System;
 using System.Windows.Forms;
 
 namespace VB6Control
 {
     public class VBForm : Form
     {
         private bool m_CreateControl= false;
         private bool m_Load = false;
 
         internal void LoadInternal()
         {
             if (!this.IsHandleCreated) this.CreateHandle();
 
             this.OnCreateControl();
             m_CreateControl = true;
 
             this.OnLoad(EventArgs.Empty);
             m_Load = true;
         }
  
         protected override void OnCreateControl()
         {
             if (!m_CreateControl) base.OnCreateControl();
         }
 
         protected override void OnLoad(EventArgs e)
         {
             if (!m_Load) base.OnLoad(e);
         }
 
         protected override void SetVisibleCore(bool value)
         {
             base.SetVisibleCore(value);
             if (!value)
             {
                 m_Load = false;
                 m_CreateControl = false;
             }
         }
     }
 }



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-03-18 (月) 04:05:44 (1612d)