Работает ли визуальное наследование с пользовательскими элементами управления в VS2008?

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

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

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

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

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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