Есть несколько способов справиться с этим, но оптимально вы хотите, чтобы решение было как можно более развязанным.
Самый развязанный метод - это рекурсивный метод findControl, который перемещает модель объекта управления, пока не найдет требуемый элемент управления и не вернет ссылку.
private Control findControl(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = findControl(c, id);
if (t != null)
{
return t;
}
}
return null;
}
Вот еще один подход, который является своего рода аккуратный, хотя я не знаю, если я бы использовал его (Несколько псевдокод):.
public FunkyUserControl : UserControl
{
private List<UserControl> subscribedControls;
public List<UserControl> Subscribers
{
get { return subscribedControls;}
}
public void SubscribeTo(UserControl control)
{
subscribedControls.Add(control);
}
}
унаследовать два UserControls от FunkyUserControl, а затем в ваш основной класс страницы вы можете сделать:
webControl1.SubscribeTo(webControl2);
webControl2.SubscribeTo(webControl1);
Теперь каждый элемент управления может открыть коллекцию своих подписчиков, чтобы найти другой элемент управления.
кто прилагает? страница? что создает зависимость страницы, зная о двух отношениях управления - увеличивая связь и зависимость. – 2008-10-17 01:03:57
Samuel, обратите внимание, что страница - это ОДНА и ТОЛЬКО вещь, которая знает отношения контроля. Эти два элемента управления НЕ знают, что они связаны. – Panos 2008-10-17 07:53:41