Как вызвать обработчик событий в VS designer?
Привет, у меня есть пользовательский элемент управления C#, состоящий из трех текстовых полей и нескольких меток. Он предназначен для размещения либо в ландшафтном режиме с тремя текстовыми полями и их надписями, расположенными горизонтально слева направо рядом друг с другом, либо в портретном режиме с ними друг над другом вертикально. Таким образом, у меня есть Sizechanged EventHandler, который хорошо работает во время выполнения - то есть вы можете изменить размер формы, содержащей пользовательский элемент управления, и если ширина больше высоты, она раскладывается горизонтально, в противном случае она раскладывается вертикально. Это работает очень хорошо.
Теперь, когда я помещаю пользовательский элемент управления в VS Studio designer (Community 2015 edition), он изначально не раскладывается в соответствии с его измененными размерами. Но если я впоследствии изменю его размер в VS designer, это произойдет - очевидно, что SizeChanged EventHandler запускается и ведет себя правильно. Если я сохраню эту форму и снова открою ее, она снова не будет правильно оформлена.
Что я должен сделать, чтобы получить его, чтобы обеспечить правильную планировку, когда это, во-первых, при повторном открытии в vs дизайнер?
Что я уже пробовал:
Я попытался добавить вызов Sizechanged EventHandler в обработчике событий загрузки пользовательского элемента управления, а также в обработчике событий загрузки формы хоста, но это не решает проблему.
0x01AA
Может быть, вам также нужно настроить макет в чем-то вроде "OnCreateControl" или "OnHandleCreated" или что-то еще.
Наверное, наиболее "защищенных виртуальных недействительными метода initlayout()"
Richard MacCutchan
Вы должны понимать, что обработчики событий не получают действия в Visual Studio, а только при запуске скомпилированного приложения.
0x01AA
Это неправильно.
c# - Winforms: почему события запускаются во время разработки? - переполнение стека[^]
Richard MacCutchan
Никогда не случалось ни с одной из моих форм.
0x01AA
Это верно. Это происходит не для событий формы,а для ваших собственных элементов управления, полученных из элемента управления или, например, панели.
Richard MacCutchan
Еще одна вещь, которую мне нужно попробовать и узнать. Спасибо.
0x01AA
Добро пожаловать. Когда вы попробуете это сделать, не следуйте примеру из приведенной выше ссылки. Лучшая практика, с моей точки зрения, состоит в том, чтобы перезаписать соответствующий виртуальный метод, например "protected virtual void OnResize(EventArgs e)", и, конечно же, вызвать там же метод базового класса.