为什么winform用户控件调整大小事件是触发事件,而没有任何调整大小命令

时间:2019-02-25 06:21:50

标签: c# winforms user-controls resize windows-forms-designer

重复我的问题:

  1. 添加新的用户控件。
  2. 添加关注方法并注册到构造器中的Resize事件。

    Resize += new EventHandler(AutoResize);
    
    private void UserControl2_Resize(object sender, EventArgs e)
    {
        MessageBox.Show($"{Width}:{Height}");
    }
    
  3. 重建此用户控件并将其添加到winform。我发现每次调用winform都会调用此方法。

  4. 如果我在Onload事件中将此方法注册为“调整大小”,那么除非真正调整大小,否则永远不会调用此方法。

1 个答案:

答案 0 :(得分:0)

请考虑以下事实:

  • Rezize发生更改时,将发生UserControl的{​​{1}}事件。
  • 创建控件的句柄时,将发生Size的{​​{1}}事件。
  • 将控件放在窗体上时,将为该控件生成以下代码:

    Load
  • 在此行UserControl // // userControl11 // this.userControl11.Location = new System.Drawing.Point(0, 0); this.userControl11.Name = "userControl11"; this.userControl11.Size = new System.Drawing.Size(150, 150); this.userControl11.TabIndex = 0; 事件尚未引发,但构造函数已执行。

考虑到事实,当您在构造函数中订阅this.userControl11.Size = new System.Drawing.Size(150, 150);事件时,Load将引发Resize事件,并且该事件将由事件处理程序处理。

但是,当您在控件的this.userControl11.Size = ...事件中订阅Resize时,事件处理程序将不会处理该初始调整大小,因为您仍未订阅Resize事件,因为尚未创建控件。