WinForms - действие после изменения размера

Можно ли выполнить определенное действие после события изменения размера (пользовательского элемента управления), например, когда кнопка мыши отпущена? Мне нужно вручную изменить размер внутреннего элемента управления и сделать это при каждом запуске события будет довольно, хм, неэффективно...

Ответ 1

Просто используйте событие ResizeEnd:

private void Form1_ResizeEnd(object sender, EventArgs e)
{
   // Your code here
}

Из MSDN:

Событие ResizeEnd возникает, когда пользователь заканчивает изменение формы, обычно путем перетаскивания одного из границы или размерную ручку, расположенную на нижний правый угол формы, а затем освободить его. Для большего информация об изменении размера операции.

Ответ 2

Вы можете подделать локальный ResizeEnd следующим образом:

public class Dummy:UserControl
{

    private readonly Timer _tDelayedResize;

    public Dummy()
    {
        this.Resize += this_Resize;
        _tDelayedResize = new Timer();
        _tDelayedResize.Interval = 5;
        _tDelayedResize.Tick += this_ResizeEnd;
    }

    void this_Resize(object sender, EventArgs e)
    {
        _tDelayedResize.Stop();
        _tDelayedResize.Start();
    }

    void this_ResizeEnd(object sender, EventArgs e)
    {
        _tDelayedResize.Stop();

        //Do your ResizeEnd logic here
        //...
    }

}

Интервал может быть изменен. Чем выше, тем больше задержка после последнего события изменения размера.

Ответ 3

Возможно, вы можете использовать SizeChanged Событие. Но я не знаю, как часто или когда он вызывается во время изменения размера.