winfrom 基類窗體與子類窗體load事件詳解


今日在寫代碼時,需要在子窗體運行時調用基類窗體中的load事件,順帶將該部分功能做一個詳細的了解。

 

Winform窗體在初始化到呈現在用戶眼前會依次經歷三個階段,構造-加載-顯示,分別對應.NET 窗體中的 InitializeComponent,onLoad,show三個調用函數,以下:

InitializeComponent:初始化窗體及窗體上的控件,加載並分配資源,注冊相關事件

 

onLoad:注冊裝載窗口事件,是窗體啟動時調用該函數,觸發formload事件,從而調用From_Load事件處理函數

 

show:用於顯示窗體,這個沒什么好說的。

 

InitializeComponent函數在類的初始化時調用,在寫程序時,有關界面布局的重新調用或整理,要么寫入InitializeComponent()函數中,要么寫入From_Load事件處理函數中(一般是后者,方便閱讀和維護),如果在構造函數中寫在InitializeComponent()函數的后面,可能會造成意想不到的錯誤。

 

當一個子類窗體調用基類窗體時,其中執行順序如下:基類窗體構造函數(窗體構造函數必須包含InitializeComponent,下同),子類窗體構造函數,子類onload函數,基類onload函數(基類一般不需要該函數),基類From_Load事件處理函數,子類From_Load事件處理函數。

 

例如,如果我希望在子窗體實現自己的邏輯前先調用基類窗體的From_Load事件處理函數,可以如下調用:

基類窗體代碼:

namespace FormLoadExcise
{
    public partial class BaseFrm : Form

    {

        public BaseFrm()
        {
            InitializeComponent();
        }
        private void BaseFrm_Load(object sender, EventArgs e)
        {
            foreach (Control control in Controls)
            {
                control.Text = "some text";
            }
        }
    }
}

子類窗體代碼(事后調用基類窗體的From_Load事件處理函數)

namespace FormLoadExcise
{
    public partial class ChildFrm : BaseFrm
    {
        public ChildFrm()
        {
            InitializeComponent();
        }
         protected override void OnLoad(EventArgs e)
        {
            this.button1.Text = "other text";
            this.label2.Text = "other text";
            base.OnLoad(e);
        }
    }
}

子類窗體代碼(事前調用基類窗體的From_Load事件處理函數)

 

namespace FormLoadExcise
{
    public partial class ChildFrm : BaseFrm
    {
        public ChildFrm()
        {
            InitializeComponent();
        }
 
        private void ChildFrm_Load(object sender, EventArgs e)
        {
            this.button1.Text = "other text";
            this.label2.Text = "other text";
        }
    }
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM