Почему событие изменения размера пользовательского элемента управления winform было триггерным событием? Нет команды изменения размера. - PullRequest
0 голосов
/ 25 февраля 2019

Чтобы повторить мою проблему:

  1. Добавить новый пользовательский элемент управления.
  2. Добавить метод follow и зарегистрироваться в событии Resize в конструкторе.

    Resize += new EventHandler(AutoResize);
    
    private void UserControl2_Resize(object sender, EventArgs e)
    {
        MessageBox.Show($"{Width}:{Height}");
    }
    
  3. Перестройте и добавьте этот пользовательский элемент управления в winform.И я обнаружил, что этот метод вызывал каждую winform-загрузку.

  4. Если я зарегистрирую этот метод для изменения размера в событии Onload, то этот метод никогда не вызывается, за исключением случаев, когда я действительно изменяю его размер.

1 Ответ

0 голосов
/ 25 февраля 2019

Примите во внимание следующие факты:

  • Событие 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, и событие будет обработано вашим обработчиком события.

Но когда вы подписываетесь на Resize в событии Load элемента управления, это начальное изменение размера не будет обработано вашим обработчиком событий, потому что вы все еще не подписались на событие Resize, потому чтоэлемент управления еще не создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...