Я пытаюсь создать класс, который, когда я создаю его экземпляр, будет иметь элемент управления веб-браузером, с которым я могу взаимодействовать. Мой код работает, когда я создаю элемент управления браузером в основной форме, но когда я пытаюсь абстрагировать его в свой собственный класс, я чего-то не понимаю в том, как работает winforms. Я предполагаю, что мне нужно что-то унаследовать или, может быть, инициализировать, но я не уверен.
Вот код класса:
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public class MyBrowserFuncs
{
public WebBrowser WB;
public MyBrowserFuncs()
{
WB = new WebBrowser();
WB.ObjectForScripting = this;
WB.Navigate("mypage.html");
}
public string Test(string msg)
{
return WB.Document.InvokeScript
("Test", new String[] { msg });
}
}
Вот соответствующий javascript на mypage.html
function Test(msg)
{
alert(msg);
return "success";
}
И вот как я хотел бы назвать это на С#
private void btnSomething_Click(object sender, EventArgs e)
{
var web = new MyBrowserFuncs();
var text = web.Test("this is a message");
}
Я не получаю никаких ошибок, но это не работает. Он работает при использовании кода в основной форме. Я предполагаю, что это может быть как-то связано с InitializeComponent();
, но я не уверен на 100%, как мне создавать и удалять элементы управления, когда они мне не нужны видимыми и я хочу абстрагировать их в класс.
Что я делаю не так?