Работает ли визуальное наследование с пользовательскими элементами управления в VS2008 - PullRequest
1 голос
/ 14 января 2009

У меня есть базовый пользовательский контроль. Я помещаю кнопки «ОК» и «Отмена» в нижнем правом углу элемента управления и привязываю их «Внизу и справа».

Затем я создаю другой пользовательский элемент управления, который наследуется от базового пользовательского элемента управления. Я изменяю размер унаследованного элемента управления (например, увеличиваю высоту или ширину). Бросьте унаследованный контроль на форму. Запустить. Унаследованный элемент управления не учитывает свойства привязки кнопок «ОК» и «Отмена».

Вот точные шаги для воспроизведения.

1 - Создать новый проект winforms

2 - Создать базовый элемент управления (BaseControl1) с помощью кнопок «ОК» и «Отмена», расположенных внизу / справа. Закрепите их там, внизу, справа. Скомпилируйте приложение.

3 - Создать новый пользовательский элемент управления (UserControl1), который наследуется от базового элемента управления (BaseControl1), созданного на шаге 1.

4 - Увеличить (в конструкторе) высоту или ширину UserControl1.

5 - Бросить UserControl1 в Form1. Запустить. Вы увидите, что кнопки «ОК» и «Отмена» находятся не там, где они должны быть.

Я что-то не так делаю или VS2008 просто не соблюдает свойства привязки элементов управления на базовом пользовательском элементе управления?

Ответы [ 2 ]

4 голосов
/ 15 января 2009

Измените свойство Модификаторы на кнопках на Защищено . Затем, после выполнения шага 4, вы заметите, что код конструктора для UserControl1 теперь содержит строку кода для установки расположения кнопок. Этого не произошло, когда ваши кнопки были определены как Friend .

Мне всегда было интересно, почему элементы управления, отброшенные из панели инструментов, не были ограничены по умолчанию Частным .

1 голос
/ 14 января 2009

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

Если вы используете селектор свойств, Visual Studio автоматически помещает некоторый код в ваше приложение, чтобы изменить эти значения (то есть код дизайнера). Найдите метод InitializeComponent () и держу пари, что вы увидите что-то с эффектом:

this.myOKButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
this.myCancelButton.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;

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

...