Можно ли перемещать элементы управления в классе формы, производном от другой формы?

Я создал формы, которые получены из другой формы, таким образом:

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), но я так и не выяснил причину этого, поэтому мне пришлось прибегнуть к изменению местоположения через сетку свойств.

Другие вопросы по тегам