Как вызвать событие Control.Resize без фактического изменения размера? - PullRequest
4 голосов
/ 05 февраля 2009

Я не делаю подкласс управления. Попытка вызвать событие с помощью Control.Size = Control.Size не удалась, поскольку она не сработает даже тогда, когда новый размер фактически не будет другим.

Ответы [ 4 ]

8 голосов
/ 05 февраля 2009

Если вы используете подклассы 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});
1 голос
/ 18 декабря 2015

Я всегда делаю это, вызывая обработчик события Resize элемента управления:

control_Resize(null, null);
0 голосов
/ 05 февраля 2009

Почему вы хотите это сделать и по какому сценарию? Вы можете вызвать OnResize, например, когда находитесь в самом элементе управления (т. Е. В своем производном классе элемента управления). (Или через Отражение, когда вы снаружи.)

Кроме того, вам, вероятно, придется изменить размер элемента управления, поскольку именно для этого предназначено событие Resize:)

0 голосов
/ 05 февраля 2009

Просто измените размер элемента управления, используя: Control.Size = new Size (x, y);

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

В качестве альтернативы, если вы просто хотите перерисовать элемент управления, выполните: Control.Invalidate ();

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