Omicron_Persey_8
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору rain_sx Вообще, задача заполнения элемента управления одной формы данными из другой - задача очень мутная и противная, потому как однозначно верного ответа не имеет. Вот представьте такую ситуацию: работаете вы проект, который представляет собой большую базу данных. Вы сделали форму, которая показывает список покупателей. Но тут пришла поправка, что хорошо-бы, чтобы менеджер видел только "своих" покупателей, (т. е. тех, которых он отоваривает). Как быть? Прога готова, переписывать не канает, так как придется половину логики переписать... Есть два варианта: этот список покупателей откуда-то но вызывается. Значит, перед вызом формы со списком нужно сделать что-то типа: ShowCustomers() { CustomersForm frm=new CustomersForm(); // создаем форму // как-то запоняем // показываем } Это первый вариант, мы заполняем форму снаружи уже исправленными данными и показываем. Как только на втором курсе ВУЗ начинается Delphi или Visual Studio все начинают таким образом слова из одной формы в другую перегонять. Но есть одно, но большое НО: а если нам надо вызвать ту же форму, с теми же фильтрами, НО из другого места? Опять повторять все манипуляции с установкой фильтров? А их иногда бывает очень большая куча. А список покупателей штука популярная, вызываться может из десятков мест (формы заказа, например, или еще откуда-нибудь). А если после того, как вы в пятнадцати местах таки сделали так, как я только что показал, вдруг понадобилось убрать одно поле из списка покупателей??? Опять в пятнадцати местах все переписывать??? Приходим к выводу, что заполнение формы перед выводом не катит. Вариант второй: сразу после своего вызова ломиться в какое-либо хранилище данных, смотрит свой случай вызова и если находит, то применяет фильтры. Все хорошо, весь код в одном месте, если что, то легко корректируется. Метод, естественно, не без недостатков, но прост и удобен. Он же чаще всего и применяется в больших системах, в частности 1С: Предприятие и Microsoft Dynamics. Ну так вот, к чему я это все городил. Я так думаю, что вы вряд ли делаете какую-нибудь большую учетную систему, и все, что я тут нагородил, вам на фик не нужно. В вашем случае нужно просто передать какие-то данные вам на фик в голову не придет разбираться в том, что написано выше. Поэтому, чтобы просто заполнить TreeView из другой формы, поставьте ему модификатор доступа public. И тогда через form1.treeView1 делайте с ним что хотите. И не нужно совершать лишние телодвижения по поводу дополнительной инкапсуляции вызовов form1.treeView1.Items.Add или с делегатами играться. Цитата: Более элегантнее чем передавать всю форму во вторую, было бы использование делегатов | К вашему сведению, ссылка на форму абсолютно ничем не отличается от ссылки на делегат: ни по количеству памяти, ни по накладным расходам на обработку. |