|
|
|
|
Автор:
|
Faust Faust
|
|
Тема:
|
RE[2]: Список компонентов формы
|
|
Дата:
|
12/15/2008 11:37:00 AM
|
Спасибо за помощь.
Второй вариант не работает:
я сделал вот так
class BaseForm :Form
{
public System.ComponentModel.IContainer
GetComponents()
{
return components;
}
}
class myForm : BaseForm
{
// здесь на какое-нить событие вызываю GetComponents, но оно реботает
// говорит что "components"(именно с маленькой буквы "c") = null
}
Попробую щас поточнее выразить для чего мне это надо:
У меня есть класс который должен уметь получить список компонент/контролов формы и получить этот список с базы, сравнить эти два списка и проставить нужные(из базы) свойства компонентам/контролам формы. А так же есть такого компонента/контрола нет базе сохранить его(name, type, caption, text, visible, enable) в базу. Вот загвоздка пока на получении компонент формы((.
>Правильным будет путь такой: объявить в классе-наследнике формы метод, которй выполняет груповую операцию над всеми элементами формы. На пример так:
>public delegate void Action(Component component);
>public void ForeEachItems(Action action)
>{
> foreach(Component comp in this.components.Components)
> action(comp);
>}
>
>Есть ещё один путь, на за такой обычно надо бить по рукам, если не отрывать их сразу: Можно на пример объёвить в наследнике формы свойство, или метод, возвращающий этот самый конейнер с компонентами:
>
>public System.ComponentModel.IContainer
> GetComponents()
>{
> return components;
>}
>
>public System.ComponentModel.IContainer
> FormComponents
>{
> get { return components; }
>}
>
>А руки отрывать надо за то, что в последнем случае нарушается принцип инкапсуляции объекта. Это должно быть оправдано и трижды перепроверено потому, что именно это и вличёт те самые нередсказуемые моменты в поведении приложения.
>
>>Столкнулся с проблеммой при получении списка компонентов на форме.
>>
>>Предыстория:
>>Cписок компонет формы приватный...
>>
>>partial class Form1
>>{ /// <summary>
>> /// Required designer variable.
>> /// </summary>
>>private System.ComponentModel.IContainer components = null;
>>//... - это выдержка кода формы, она генерится автоматом при созаднии
>>//... формы в дизайн-тайм
>>
>>В итоге получается что у формы ты можешь спросить вот это
>>foreach(Component comp in this.components.Components)
>>{//~~~ ваш код}
>>
>>А если передать форму как параметр в функцию не принадлежащую этой форме то получить список компонент указанным выше способом неполучится.
>>
>>Внимание вопрос - что делать, как все-таки получить список компонент, а потом
>>обратится к опредленным свойствам компонеты?
>>
>>
|
|
|
|