Как я могу получить доступ к элементу управления WebBrowser из UserControl?

У меня есть этот макет:

Пользовательский элемент управления внутри панели. Панель находится внутри Form1.

WebBrowser находится в другой панели, которая также находится внутри Form1.

So:

             Form1
Panel1                  Panel2
MyUserControl           TheWebBrowser

Как я могу установить URL-адрес моего веб-браузера в Panel2 из MyUserControl?

Я пробовал что-то подобное, но это не работает.

this.Parent.Parent.Controls["panel2"].Controls["webBrowser1"]

person Sergio Tapia    schedule 23.10.2009    source источник


Ответы (2)


Рассматривали ли вы создание зависимости свойства от вашего UserControl? Таким образом, ваш пользовательский элемент управления не должен знать о том, где он находится, а только то, что он имеет ссылку на элемент управления WebBrowser.

public class UserControl: Control
{
    .
    .
    .
    public WebBrowser Browser{ get; set; }
    .
    .
    .
}

Таким образом, ваша основная форма отвечает за подключение, и вы избегаете неприятной связи с родительской формой.

person Josh    schedule 23.10.2009

Я мог бы отделить больше и поместить бизнес-логику в класс бизнес-уровня. Затем я создаю объект бизнес-уровня в месте, где он может кэшировать ссылки на элементы управления, необходимые для работы, и кэшировать ссылку объекта бизнес-уровня в объектах, которые должны вызывать логику. Это принесло бы мне пользу, когда мне нужно заменить элемент управления WebBrowser новым классом (например, сгенерированным из aximp). Я могу вызывать объект бизнес-логики, обращаясь к кэшированной ссылке почти так же, как doc/view/frame MFC, где вы можете использовать GetDocument()->UpdateAllViews для обновления других представлений, когда что-то изменяется.

person Sheng Jiang 蒋晟    schedule 23.10.2009