#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;