Запрещение доступа к унаследованным элементам управления winform - PullRequest
1 голос
/ 05 июня 2009

Я пишу BaseForm для наследования. BaseForm имеет несколько основных стандартных элементов управления моего приложения.

Проблема в следующем: Я хочу, чтобы унаследованные формы могли использовать и изменять эти элементы управления, но не удалять их из формы.

Самая большая проблема - это TabControl, вкладки которого должны добавляться пользователями Inherited Forms. Если я установлю свойства «Модификаторы» TabControl на BaseForm как закрытые, то унаследованные формы не смогут добавлять новые вкладки. Если я установлю свойства «Модификаторы» TabControl в BaseForm как защищенные, наследуемые формы могут удалить TabControl из BaseForm.

Есть, чтобы остановить это? Индивидуальный дизайн?

Ответы [ 2 ]

4 голосов
/ 05 июня 2009

Густаво,

Вы стоите у подножия первого предгорья горной цепи проблем, с которыми вы столкнетесь, вынудив разработчиков унаследовать от "базового класса формы". Исходя из моего опыта, фреймворки, построенные таким образом, имеют тенденцию быть очень хрупкими и трудными для разработчиков.

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

// set the Modifiers property on tabControl1 to "Private" then implement this
public TabControl.TabPageCollection TabPages
{
    get { return tabControl1.TabPages; }
}

Наследование должно использоваться для обеспечения общей функциональности, а не для обеспечения однородного состава. Вы действительно должны подумать о внедрении «основного экрана» и разработке своей инфраструктуры, чтобы позволить разработчикам «подключить» свои элементы управления к этому экрану.

Блок приложения Composite UI - хорошее место для начала, хотя может быть что-то более недавнее, чего я не знаю.

1 голос
/ 05 июня 2009

Если вы хотите, чтобы ваши формы работали "хорошо" в конструкторе Visual Studio, то вам не повезло - закрытый элемент управления Tab будет работать при непосредственном редактировании родительской формы, но не будет работать при попытке редактировать потомков.

Я считаю, что @Michael Meadows прав в своем ответе - в прошлом я сам создавал сложные рамки, которые не смогли выполнить то, что я хотел.

Вообще говоря, когда вы смотрите на объединение вещей с наследованием , я верю, что композиция послужит вам лучше. По крайней мере, это мой опыт.

Облегченные идеи смотрите в серии постов в блоге Джереми Миллера. Создайте свой собственный CAB - много хорошего материала.

...