2017-08-17 9 views
0

私はCefSharpを使用してブラウザを作成しています。それは働いて、私は新しいタブを使用して様々なウェブサイトに移動することができます。しかし、以前のタブをクリックすると、すべてのタブはアドレスバーに同じURLと表示され、すべて同じタイトルになります。正しいアドレスとタイトルの変更でCefSharpで新しいタブを実装する方法は?

ここ
private void FormBrowser_Load(object sender, EventArgs e) 
    { 
     CefSettings settings = new CefSettings(); 
     Cef.Initialize(settings); 
     ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text); 
     browser.Parent = tabControl.SelectedTab; 
     browser.Dock = DockStyle.Fill; 
     browser.AddressChanged += Browser_AddressChanged; 
     browser.TitleChanged += Browser_TitleChanged; 
    } 

    // new tab function 
    public void addNewTab() 
    { 
     TabPage tpage = new TabPage(); 
     tpage.Text = "New Tab"; 
     tabControl.Controls.Add(tpage); 
     tabControl.SelectTab(tabControl.TabCount - 1); 
     toolStripTextBoxAddress.Text = ""; 
     ChromiumWebBrowser browser = new ChromiumWebBrowser(toolStripTextBoxAddress.Text); 
     browser.Parent = tpage; 
     browser.Dock = DockStyle.Fill; 
     browser.AddressChanged += Browser_AddressChanged; 
     browser.TitleChanged += Browser_TitleChanged; 
    } 

    private void Browser_TitleChanged(object sender, TitleChangedEventArgs e) 
    { 
     this.Invoke(new MethodInvoker(() => 
     { 
      tabControl.SelectedTab.Text = e.Title; 
     })); 
    } 

    private void Browser_AddressChanged(object sender, AddressChangedEventArgs e) 
    { 
     this.Invoke(new MethodInvoker(() => 
     { 
      toolStripTextBoxAddress.Text = e.Address; 
     })); 
    } 

    // navigate method 
    private void toolStripTextBoxAddress_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      if (!string.IsNullOrEmpty(toolStripTextBoxAddress.Text)) 
      { 
       if (!toolStripTextBoxAddress.Text.Contains(".")) 
       { 
        getCurrentBrowser().Load("http://www.google.com/search?q=" + toolStripTextBoxAddress.Text); 
       } 
       else 
       { 
        getCurrentBrowser().Load(toolStripTextBoxAddress.Text); 
       } 
      } 
     } 
    } 

    // get current browser 
    private ChromiumWebBrowser getCurrentBrowser() 
    { 
     return (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0]; 
    } 

    // new tab button 
    private void toolStripButtonNewTab_Click(object sender, EventArgs e) 
    { 
     addNewTab(); 
    } 

は、私が試してみました何をされています:ここに私のコードです

private void tabControl_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ChromiumWebBrowser currentBrowser = getCurrentBrowser(); 
     toolStripTextBoxAddress.Text = currentBrowser.Address; 
    } 

私はそれがこのラインで私にエラーを与えている新しいタブを開こうreturn (ChromiumWebBrowser)tabControl.SelectedTab.Controls[0];

どのようにすることができます私はこの問題を解決する?前もって感謝します。

答えて

0

自分のマルチタブcefsharpコードを自分のものとよく似た方法で書き、同じエラーが発生しました。

デフォルトの数のタブページが原因でした。 (タブコントロールをフォームにドラッグすると、デフォルトで2つのタブページが表示されます)。プロパティパネルから、これらの2つのタブページを削除し、ブラウザがゼロのタブページを開始するようにしました。任意のタブページは、ブラウズを開始するとき、URLを入力するか、またはお気に入りをクリックすることによってのみ追加されます。

タブページの初期数を0に設定しないと、2つの「空の」タブページにはブラウザが接続されません。したがって、getcurrentbrowser()関数は空のタブページでブラウザを見つけられず、エラーが発生します。