Можно ли перемещать элементы управления в классе формы, производном от другой формы?
Я создал формы, которые получены из другой формы, таким образом:
Public Class MyForm
' ...etc
End Class
Public Class MyDerivedForm
Inherits MyBaseForm
' ...etc
End Class
Public Class MyOtherDerivedForm
Inherits MyBaseForm
' ...etc
End Class
Это работает довольно хорошо, и я могу добавить элементы управления к производной форме с помощью дизайнера форм. Но я хотел бы немного перенести некоторые из унаследованных элементов управления на MyDerivedForm
без помех MyBaseForm
или же MyOtherDerivedForm
, Я не вижу никакого способа сделать это на дизайнере форм.
Возможно ли это сделать (желательно с дизайнером, но с кодом при необходимости)?
2 ответа
Это не типичная проблема VB.NET, поэтому не уверен, что здесь происходит. Вы получите значок блокировки на унаследованных элементах управления и серое окно "Свойства" для унаследованного элемента управления, если для свойства Modifiers элемента управления в базовом классе установлено значение Private. Дизайнер Winforms наблюдает за доступностью члена базового класса. Частные участники не могут быть запутаны. Значением по умолчанию для модификаторов является Friend в VB.NET, Private в C#.
Сделайте его Friend, чтобы позволить производному классу формы изменять свойства элемента управления. Если базовый класс формы живет в другой сборке, то Friend недостаточно хорош, вам понадобится Public.
Свойство Anchor может вызывать проблемы, но только если вы привязываетесь справа или снизу. Элемент управления обладает способностью оказаться в неправильном месте, когда производная форма имеет размер, отличный от базовой формы, если элемент управления привязан таким образом. Просто избежать этого, не привязывая справа / снизу в базовом классе и не меняя привязку в производном классе.
В моем приложении VB.NET WinForms я унаследовал формы, и я могу просто захватить унаследованные элементы управления в конструкторе и перемещать их, как если бы я использовал ненаследуемые элементы управления в форме.
Однако в прошлом я заметил две вещи, которые это останавливают. Если вы измените положение элементов управления в базовой форме или измените некоторые свойства позиционирования (например, привязку или закрепление), то это может (но не всегда) переместить ваши унаследованные элементы управления. Также я не мог переместить некоторые из своих унаследованных элементов управления в более ранней версии.NET (я полагаю, что это 2.0), но я так и не выяснил причину этого, поэтому мне пришлось прибегнуть к изменению местоположения через сетку свойств.