Vb.net 在不同的类中调用sub不正常
我正在VB.Net中使用Cefsharp创建一个浏览器。我创建了一个自定义的Vb.net 在不同的类中调用sub不正常,vb.net,winforms,cefsharp,Vb.net,Winforms,Cefsharp,我正在VB.Net中使用Cefsharp创建一个浏览器。我创建了一个自定义的LifeSpanHandler来处理弹出窗口,但是当我试图调用另一个类中的公共子类时,它没有给出预期的输出。 我使用以下代码创建了我的LifeSpanHandler: Public Class LifeSpanHandler Implements ILifeSpanHandler Public Event PopupRequest As Action(Of String) Public Function OnBefore
LifeSpanHandler
来处理弹出窗口,但是当我试图调用另一个类中的公共子类时,它没有给出预期的输出。
我使用以下代码创建了我的LifeSpanHandler
:
Public Class LifeSpanHandler
Implements ILifeSpanHandler
Public Event PopupRequest As Action(Of String)
Public Function OnBeforePopup(browser As IWebBrowser, sourceUrl As String, targetUrl As String, ByRef x As Integer, ByRef y As Integer, ByRef width As Integer, ByRef height As Integer) As Boolean Implements ILifeSpanHandler.OnBeforePopup
RaiseEvent PopupRequest(targetUrl)
My.Settings.newpage = targetUrl
Call Form1.IntNewTab()
Return True
End Function
Public Sub OnBeforeClose(browser As IWebBrowser) Implements ILifeSpanHandler.OnBeforeClose
End Sub
End Class
然后我有了browser.LifeSpanHandler=newlifespanhandler
,在那里它被初始化。(使用browser
作为CefSharp.WinForms.ChromiumWebBrowser
)
我将targetURL
保存在My.Settings.newpage
中,然后当浏览器初始化时,它将打开到该URL。在不同的类(和不同的形式)中,我有以下代码:
Public Sub IntNewTab()
Dim tab As New TabPage
Dim newtab As New tabs
newtab.Show()
newtab.Dock = DockStyle.Fill
newtab.TopLevel = False
tab.Controls.Add(newtab)
Me.CustomTabControl1.TabPages.Add(tab)
Me.PictureBox1.Location = New System.Drawing.Point(PictureBox1.Location.X + 150, 3)
My.Settings.newpage = My.Settings.homepage
Me.CustomTabControl1.SelectedTab = tab
End Sub
这是添加新选项卡的代码。但是在我的LifeSpanHandler
中,当我调用Form1.IntNewTab()
时,浏览器会冻结在焦点之外。该窗口是灰色的(意味着它失去了焦点),我不能拖动它,它停留在所有其他东西的顶部,我不能与浏览器的任何部分进行交互
为了测试其他内容,我在Form1
中添加了一个按钮,其中包含IntNewTab
中的确切代码,当我单击它时,它会像正常情况一样打开指定页面的新选项卡。我还尝试让按钮保持可见,并在弹出前添加Form1.Button1.PerformClick
,但这也不起作用。还有谁有这样做的经验,或者有什么建议吗
编辑:
我在浏览器中添加了以下代码,以尝试删除默认实例(这是我最了解的):
至表格1
:
Module Program
Friend frmMain As Form1
End Module
在表格1\u加载中
:
`frmMain = Me`
然后,我在LifeSpanHandler
中添加了此代码以反映更改:
Dim mainFrm = New Form1()
mainFrm.IntNewTab()
但这并没有起作用。就像以前一样,它一直冻结在焦点之外。我还尝试添加了
frmMain.IntNewTab()
(位于Form1\u Load
中的代码),但仍然无法工作。使用默认表单实例可能是问题所在。看起来不应该这样,但也许…@你什么意思?你是在说把Form1改成其他东西吗?@Proputix我尽我所能理解它,并对我的原始问题进行了编辑。你可能需要重新整理到UI
线程LifeSpanHandler
正在一个CEF
线程中运行。