首页 > 解决方案 > 为什么winform用户控件调整大小事件是触发事件没有任何调整大小命令

问题描述

重复我的问题:

  1. 添加一个新的用户控件。
  2. 在构造函数中添加跟随方法并注册到 Resize 事件。

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

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

标签: c#winformsuser-controlsresizewindows-forms-designer

解决方案


考虑以下事实:

  • Rezize事件UserControl将在发生Size变化时发生。
  • 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事件,该事件将由您的事件处理程序处理。

但是当您订阅控件ResizeLoad事件时,初始调整大小将不会由您的事件处理程序处理,因为您还没有订阅该Resize事件,因为尚未创建控件。


推荐阅读