• WinForm窗体事件执行次序


    当 Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件:
            System.Windows.Forms.Control.HandleCreated
            System.Windows.Forms.Control.BindingContextChanged
            System.Windows.Forms.Form.Load
            System.Windows.Forms.Control.VisibleChanged
            System.Windows.Forms.Form.Activated
            System.Windows.Forms.Form.Shown

        当应用程序关闭时,会以下列顺序引发主要表单的关闭事件:         
            System.Windows.Forms.Form.Closing
            System.Windows.Forms.Form.FormClosing
            System.Windows.Forms.Form.Closed
            System.Windows.Forms.Form.FormClosed
            System.Windows.Forms.Form.Deactivate

    二、以下是我测试的次序,全部protected override 这些事件,并且在其base.的前后分别处理一次,如下

    protected override void OnLoad(EventArgs e)    
    { 
        textBox1.Text += "OnLoad1" + "\r\n";    
        base.OnLoad(e);    
        textBox1.Text += "OnLoad2" + "\r\n";    
    }

    OnClientSizeChanged1
    OnClientSizeChanged2
    OnClientSizeChanged1
    OnClientSizeChanged2

    // Loyout要多次执行
    OnLayout1 
    OnLayout2
    OnHanleCreated1
    OnHanleCreated2
    OnInvalidated1
    OnInvalidated2

    // 注意这里的一点点变化
    OnCreateControl1
    OnLoad1
    OnLoad2
    OnCreateControl2

    //
    OnLayout1
    OnLayout2
    OnActivated1
    OnActivated2
    OnShown1
    OnShown2
    OnPain1
    OnPain2

    希望这个次序能给大家带来用处。。可以在不同事件中去处理所需要的代码

    三、以下是代码源

    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Text; 
    using System.Windows.Forms; 
      
    namespace WindowsFormsApplication1 
    { 
        public partial class Form1 : Form 
        { 
            public Form1() 
            { 
                InitializeComponent(); 
            } 
      
            /* 
             * 输出窗体事件的执行次序 
             */
      
            protected override void OnActivated(EventArgs e) 
            { 
                textBox1.Text += "OnActivated1" + "\r\n"; 
                base.OnActivated(e); 
                textBox1.Text += "OnActivated2" + "\r\n"; 
            } 
      
            protected override void OnClientSizeChanged(EventArgs e) 
            { 
                textBox1.Text += "OnClientSizeChanged1" + "\r\n"; 
                base.OnClientSizeChanged(e); 
                textBox1.Text += "OnClientSizeChanged2" + "\r\n"; 
            } 
      
            protected override void OnCreateControl() 
            { 
                textBox1.Text += "OnCreateControl1" + "\r\n"; 
                base.OnCreateControl(); 
                textBox1.Text += "OnCreateControl2" + "\r\n"; 
            } 
      
            protected override void OnDeactivate(EventArgs e) 
            { 
                textBox1.Text += "OnDeactivate1" + "\r\n"; 
                base.OnDeactivate(e); 
                textBox1.Text += "OnDeactivate2" + "\r\n"; 
            } 
      
            protected override void OnHandleCreated(EventArgs e) 
            { 
                textBox1.Text += "OnHanleCreated1" + "\r\n"; 
                base.OnHandleCreated(e); 
                textBox1.Text += "OnHanleCreated2" + "\r\n"; 
            } 
      
            protected override void OnHandleDestroyed(EventArgs e) 
            { 
                textBox1.Text += "OnHanleDestoryed1" + "\r\n"; 
                base.OnHandleDestroyed(e); 
                textBox1.Text += "OnHanleDestoryed2" + "\r\n"; 
            } 
      
            protected override void OnInvalidated(InvalidateEventArgs e) 
            { 
                textBox1.Text += "OnInvalidated1" + "\r\n"; 
                base.OnInvalidated(e); 
                textBox1.Text += "OnInvalidated2" + "\r\n"; 
            } 
      
            protected override void OnLayout(LayoutEventArgs levent) 
            { 
                textBox1.Text += "OnLayout1" + "\r\n"; 
                base.OnLayout(levent); 
                textBox1.Text += "OnLayout2" + "\r\n"; 
            } 
      
            protected override void OnLoad(EventArgs e) 
            { 
                textBox1.Text += "OnLoad1" + "\r\n"; 
                base.OnLoad(e); 
                textBox1.Text += "OnLoad2" + "\r\n"; 
            } 
      
            protected override void OnPaint(PaintEventArgs e) 
            { 
                textBox1.Text += "OnPain1" + "\r\n"; 
                base.OnPaint(e); 
                textBox1.Text += "OnPain2" + "\r\n"; 
            } 
      
            protected override void OnShown(EventArgs e) 
            { 
                textBox1.Text += "OnShown1" + "\r\n"; 
                base.OnShown(e); 
                textBox1.Text += "OnShown2" + "\r\n"; 
            } 
        } 
    }

    转自:http://blog.csdn.net/neok/article/details/4616265

  • 相关阅读:
    c语言之指针特性
    【java异常】【redis】ERR Client sent AUTH, but no password is set
    【Tomcat】系统找不到指定的路径
    【电脑】查看主机名
    【java异常】Building workspace has encountered a problem. Error
    【MyEclipse】安装svn插件
    【oracle】drop,truncate,delete用法
    【java异常】redis.clients.jedis.exceptions.JedisConnectionException: Could not get a res
    【java】定时任务停止时间设置
    【java异常】It's likely that neither a Result Type nor a Result Map was specified
  • 原文地址:https://www.cnblogs.com/dmhai/p/2910000.html
Copyright © 2020-2023  润新知