C# Доступ к dotnetBrowser из UserControl
По сути, я использую dotNetBrowser для проекта, который загружаю в панель в моей главной форме, и у меня есть кнопка в пользовательском контроле для ввода пользователя, чтобы он мог взаимодействовать с браузером. Вот что у меня есть:
public partial class Form1 : Form
{
public BrowserView browserView = new WinFormsBrowserView();
public Form1()
{
InitializeComponent();
this.panel1.Controls.Add((Control)browserView);
browserView.Browser.LoadURL("URL TO BE LOADED");
browserView.Browser.FinishLoadingFrameEvent += delegate (object sender, FinishLoadingEventArgs e)
{
if (e.IsMainFrame)
{
// Do stuff when loaded
} else return;
}
};
}
}
Это прекрасно работает, в моем usercontrol.cs у меня есть:
public void button1_Click(object sender, EventArgs e)
{
BrowserView br = (this.Parent as Form1).Controls["browserView"] as BrowserView;
br.Browser.LoadURL("NEW URL");
}
Чтобы при нажатии кнопки он мог загрузить новый URL. Но это бросает нулевое исключение.
По сути, мне нужны эти два компонента, чтобы можно было передавать информацию друг другу. Метод, который я использовал, работал нормально для других элементов управления Form1, но не для браузера.
Любой совет?
2 ответа
В твоем случае, browserView
это имя публичной переменной, так что вы можете просто использовать(this.Parent as Form1).browserView
чтобы получить к нему доступ.
Вы добавляете browserView
в Form1.panel1
, но пытается получить его от (this.Parent as Form1)
,
Вам не нужно искать BrowserView
когда у вас есть явная ссылка на него. Я предлагаю дать эту ссылку на пользовательский элемент управления. Пользовательский контроль со знанием внутренней части формы хостинга означает, что информация движется в неправильном направлении.
Имена элементов управления присваиваются им в IDE и пусты при создании элементов управления в коде.