2017-08-17 1558 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代碼,並且遇到了同樣的錯誤。

這是由默認的標籤頁數造成的。 (當你拖拽tabcontrol到你的表單時,默認情況下會有2個tabpages開頭)。從屬性面板中,我刪除了這兩個標籤,以便瀏覽器啓動智能零頁面。只有在您開始瀏覽時纔會添加任何標籤頁,方法是輸入網址或點擊收藏夾。

如果您沒有將初始頁數設置爲零,那麼這兩個「空白」標籤頁就沒有附加到瀏覽器。因此,getcurrentbrowser()函數無法在這些空白頁面上找到任何瀏覽器併發生錯誤。

相關問題