Невозможно изменить размер / границы формы во время выполнения (C #)

#c# #winforms

#c# #winforms

Вопрос:

У меня есть форма, которая принадлежит UserControl (которая, в свою очередь, сильно вложена в другие формы / UserControls). Чтобы изменить размер формы при изменении размера UserControl, я выполняю следующее внутри переопределения метода onLayout UserControl:

this.Form.Bounds = someValidRectangle;

Теперь, когда я изменяю размер окна приложения и выполняется эта строка, значение Bounds не меняется. Я также пытался явно задать высоту и ширину, но безрезультатно.

В моей форме автоматическое масштабирование = false, автоматический размер = false, автоматический режим = только для роста, минимальный размер и максимальный размер = 0,0.

Я никогда раньше не сталкивался с подобной проблемой. Что может помешать фактическому заданию размера моей формы?

Ответ №1:

Оказывается, что ключом была тяжелая вложенность. Я наткнулся на эту статью, в которой описывается ограничение Windows на изменение размеров элементов управления вложенностью: http://blogs.msdn.com/b/alejacma/archive/2008/11/20/controls-won-t-get-resized-once-the-nesting-hierarchy-of-windows-exceeds-a-certain-depth-x64.aspx

Резюме: стек ядра отключается из-за всех вызовов resize, предотвращая дальнейшие сообщения об изменении размера от ОС.

Комментарии:

1. Довольно интересно. Со мной такого тоже никогда не случалось, так что спасибо за эту ссылку.

Ответ №2:

Вы также переопределили метод SetBoundsCore вашего элемента управления? Если нет, попробуйте сделать это.

РЕДАКТИРОВАТЬ: Прочитайте также соответствующую документацию msdn, которая содержит примечания о ее переопределении. http://msdn.microsoft.com/en-us/library/system.windows.forms.control.setboundscore.aspx

Ответ №3:

В моем случае на это повлияло WindowsState. Приведенный ниже код сработал для меня:

         WindowState = FormWindowState.Normal;
        Size = bounds.Size;
        Bounds = bounds;