zoukankan      html  css  js  c++  java
  • 从设计器中打开窗体的构造函数执行问题

    前阵子测试DesignMode的时候,发现结果总是与预期不一致。好久都没搞明白。
    最近,偶然想到一件事。猜想可能与此有关。因此测试了一下。测试结果记录如下:
    测试1:在从设计器打开窗体时,是否执行构造函数,分别对当前类构造函数与基类构造函数进行测试。
    测试过程:
    添加两个窗体FrmDisignModeTestBase和FrmDisignModeTest,其中FrmDisignModeTest继承自FrmDisignModeTestBase。在其构造函数中分别写入一些测试代码:
    public FrmDesignModeTestBase()
    {
    InitializeComponent();
    label1.Text = "base Constructor has been executed";
    }
    public FrmDisignModeTest()
    {
    InitializeComponent();
    label2.Text = "Constructor has been executed";
    }
    编译程序,再从设计器打开FrmDisignModeTest,可以看到FrmDisignModeTest的构造函数未执行,但FrmDisignModeTestBase被执行。
    测试结果:在设计器中打开窗体时,窗体基类构造函数将被执行,当前类构造函数不会被执行。
    在测试过程中,同时发现一个现象:修改基类构造函数,不生成程序,就打开派生窗体时,可以看到执行的基类构造函数是未修改之前的代码;重新生成后再打开,执行的基类构造函数是修改的后代码。经过验证,结果确实如此。
    由此,可以推断:在IDE中打开窗体时,将从基类所在程序集加载控件并执行其构造函数。
    注:无论是否先编译程序,打开窗体时,窗体的当前构造函数始终不会被执行。
    注:对于复合控件,添加到IDE中时,其内部子控件的DesignMode会失效。若一个控件被继承,在IDE中使用派生类控件时,基类的DesignMode不会失效。

  • 相关阅读:
    day70 django中间件
    day69 cookie与session
    day68 form组件
    day67 前后端数据交互
    day65 django进阶(1)
    day64 django模型层
    day63 django入门(4)
    day62 作业
    Python正课142 —— DRF 进阶3 路由与认证
    一文搞懂什么是IaaS, PaaS和SaaS
  • 原文地址:https://www.cnblogs.com/yedaoq/p/1630458.html
Copyright © 2011-2022 走看看