2016-03-20 10 views
2

私はWebブラウザで作業していますVB(IEエンジンでは、後でGeckoFXを使用します)で、カスタムメニューを使ってコンテキストメニューをオーバーライドしました。 「新しいタブで開く」ボタンが含まれています。VB.Net - Webbrowser、新しいタブで開くNavigation Error

ユーザーがボタンをクリックすると、もう1つのWebブラウザが表示され、その中に以前のWebブラウザからのリンクが表示されます。ここで

は私のコードです:

Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click 
    Dim x1 As New TabPage 
    Dim B1 As New WebBrowser 
    TabControl1.TabPages.Add(x1) 
    TabControl1.SelectTab(x1) 
    B1.IsWebBrowserContextMenuEnabled = False 
    B1.ContextMenuStrip = Open 
    B1.Dock = DockStyle.Fill 
    TabControl1.SelectedTab.Controls.Add(B1) 
    Dim Elem As HtmlElement = WebBrowser1.Document.ActiveElement 
    Dim target As String = Elem.GetAttribute("href") 
    B1.Navigate(target) 
End Sub 

しかし、この行に:ユーザーが最初にWebブラウザからそれを開いた場合

Dim Elem As HtmlElement = WebBrowser1.Document.ActiveElement 

新しいWebBrowserコンポーネントが(正しいリンクにナビゲートしますWebBrowser1)。したがって、ユーザが第2のウェブブラウザ上にあり、新しいタブを開く場合、第3のウェブブラウザは、第2のウェブブラウザが既に存在する場所をナビゲートする。だから、私はこれをどのように修正すべきですか?

何を置き換える必要がありますか?WebBrowser1.Document.ActiveElement ??事前

+0

正しい単語の引用符を使用してください。そうでない場合は、これを読むと非常に迷惑になります。 –

答えて

0

おかげで現在WebBrowser1たびに言及しています。現在のWebブラウザを参照するには、最初に選択したタブを取得し、TabPageの中にWebBrowserを入力する必要があります。

あなたは、あなたのタブページにWebBrowserコントロールを持っている、またはあなたがコントロールはいつもあなたはこのように行うことができます同じインデックスを持っていることがわかっている場合:

あなたが SelectedTab初の制御をキャスト DirectCastを使用して
Dim Elem As HtmlElement = DirectCast(TabControl1.SelectedTab.Controls(0), WebBrowser).Document.ActiveElement 

WebBrowser

SelectedTab.Controlsは、コンテナ内のすべてのコントロールのコレクションです。最初のコントロールはインデックス0(したがってSelectedTab.Controls(0)の0)を介してアクセスされます。

+0

エラーが発生しました:「System.NullReferenceException」型の未処理例外が発生しました –

+0

@AndrewGeo:右。あなたの 'TabControl1.SelectTab(x1)'行の前に置くとうまくいくはずです。 –

+0

ああ神様、ありがとう、それはうまくいきます:) –

関連する問題