Решение Hans работает (и похоже, что это единственный способ сделать это), но для этого нужны эти обработчики в каждой форме, использующей ваш контроль (что не всегда приемлемо).
Таким образом, вы можете использовать простой обходной путь, запускающий таймер при изменении размера.
Каждый раз, когда размер будет изменен, ваш таймер будет перезапущен. И только когда в течение некоторого времени не будет изменений размера (_timer.Interval), он вызовет метод ResizeFinished ().
private Timer _timer;
public MyControl()
{
_timer = new Timer();
_timer.Interval = 500;
_timer.Tick += (sender, e) => ResizeFinished();
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
_timer.Start();
}
private void ResizeFinished()
{
_timer.Stop();
// Your code
}
Как видите, ваш код будет вызываться только через 500 мс после последнего изменения размера.