C#实现多选项卡的浏览器控件

2019-12-30 11:43:18刘景俊

我们主要采用TabControl和WebBrowser来实现多选项卡浏览器控件开发。

现介绍主要控件实现代码。

u  新建选项卡页面代码实现如下:

 


public void CreateNewTabPage(string url)

{

  ExtendedWebBrowser web = new ExtendedWebBrowser();

  web.Name = "WebBroswer" + _webBrowserLists.Count.ToString();

  web.Dock = DockStyle.Fill;

  web.Margin = new Padding(0, 0, 0, 0);

  web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

  web.BeforeNewWindow += new EventHandler(webBrowser1_BeforeNewWindow);

  web.Navigate(url);

  _webBrowserLists.Add(web);

 

  TabPage tbp = new TabPage();

  tbp.Name = "TabPage" + tabControl1.TabCount.ToString();

  tbp.Text = "空白页";

  tbp.Padding = new Padding(0, 3, 0, 0);

  tbp.Margin = new Padding(0, 3, 0, 0);

  tbp.ImageIndex = 0;

  tbp.Controls.Add(web);

 

  this.tabControl1.Controls.Add(tbp);

  this.tabControl1.SelectedTab = tbp;

}

 

u 把网页标题及图片关闭按钮的绘制选项卡中代码实现如下:

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)

{

 

  try

  {

    Graphics g = e.Graphics;

 

    Rectangle tabRectangle = this.tabControl1.GetTabRect(e.Index);

 

    //先添加TabPage属性 

    g.DrawString(this.tabControl1.TabPages[e.Index].Text

    , this.Font, SystemBrushes.ControlText, tabRectangle.X + 3, tabRectangle.Y + 3);

 

    if (tabControl1.TabCount > 1)

    {

      //再画一个矩形框

      using (Pen p = new Pen(SystemColors.Control))

      {

        tabRectangle.Offset(tabRectangle.Width - (CLOSE_SIZE + 3), 2);

        tabRectangle.Width = CLOSE_SIZE;

        tabRectangle.Height = CLOSE_SIZE;

        g.DrawRectangle(p, tabRectangle);

      }

 

      g.DrawImage(e.State == DrawItemState.Selected ? imageList1.Images["closeSelected"] : imageList1.Images["close"], new Point(tabRectangle.X, tabRectangle.Y));

 

    }

    g.Dispose();

  }

  catch (Exception ex)

  {

    throw (ex);

  }

}

u  Webbrowser控件完成时及Webbrowser控件新建窗口时代码实现如下:

 


private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)

{

  ExtendedWebBrowser web = (ExtendedWebBrowser)(sender);

  string  TabPage tb = (TabPage)web.Parent;

  tb.Text = title.Length > 6 ? title.Substring(0, 6) + "..." : title;

  if (tabControl1.SelectedTab == tb)

  {

    this.Text = title;

  }

}

private void webBrowser1_BeforeNewWindow(object sender, System.EventArgs e)

{

  WebBrowserExtendedNavigatingEventArgs eventArgs = e as WebBrowserExtendedNavigatingEventArgs;

  CreateNewTabPage(eventArgs.Url);

  eventArgs.Cancel = true;

}