Я не подклассифицирую элемент управления. Попытка инициировать событие через Control.Size = Control.Size
не удалась, так как оно не запускается, даже если новый размер на самом деле не отличается.
Как вызвать событие Control.Resize без фактического изменения размера?
Ответы (4)
Если вы создаете подкласс Control
, вы можете вызвать OnResize
напрямую или предоставить его через API:
public void OnResize() {
this.OnResize(EventArgs.Empty);
}
Однако вы не можете сделать это для произвольных элементов управления. Вы могли бы поменять Size
туда-сюда? В качестве альтернативы вы можете использовать отражение, но это хаки:
typeof (Control).GetMethod("OnResize",
BindingFlags.Instance | BindingFlags.NonPublic)
.Invoke(myControl, new object[] {EventArgs.Empty});
Я всегда делаю это, вызывая обработчик события Resize элемента управления:
control_Resize(null, null);
Почему вы хотите это сделать и в каком сценарии? Вы можете вызвать OnResize, например, когда вы находитесь в самом элементе управления (т.е. в вашем производном классе элемента управления). (Или через Reflection, когда вы снаружи.)
Кроме того, вам, вероятно, придется изменить размер элемента управления, поскольку для этого предназначено событие Resize :)
Просто измените размер элемента управления, используя: Control.Size = new Size(x,y);
Изменение размера элемента управления вызовет событие изменения размера для этого элемента управления, и размер элемента управления должен измениться.
В качестве альтернативы, если вы просто хотите перерисовать элемент управления, выполните: Control.Invalidate();