• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#实现多选项卡的浏览器控件

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,奔驰c200等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文详细为大家分享了C#多选项卡的浏览器控件的设计与实现,供大家参考,具体内容如下

1.  为什么我们需要多选项卡的浏览器控件
项目中需要使用WinForm应用程序来包装BS应用程序的浏览器外壳,在.NET的WebBrowser中没有多选项卡浏览的自带配置属性,我们需要实现多选项卡的浏览器控件来实现包装BS应用程序的目的,而不会弹出IE浏览器窗口。

2. 我们需要了解哪些知识点
2.1.     WebBrowser控件
WebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装。托管包装使您可以在 Windows 窗体客户端应用程序中显示网页。使用 WebBrowser 控件,可以复制应用程序中的 Internet Explorer Web 浏览功能,还可以禁用默认的 Internet Explorer 功能,并将该控件用作简单的 HTML 文档查看器。

l  如何:使用 WebBrowser 控件定位到 URL

this.webBrowser1.Navigate("http://www.microsoft.com");

l  WebBrowser的 CreateSink 方法和DetachSink 方法

CreateSink方法使基础 ActiveX 控件与可以处理控件事件的客户端相关联。

DetachSink方法使从基础 ActiveX 控件中释放附加在 CreateSink 方法中的事件处理客户端。

下面的代码示例演示如何在派生自 WebBrowser 的类中使用此方法,该方法使用 OLE DWebBrowserEvents2 接口中的 NavigateError 事件对常规 WebBrowser 事件进行补充。

using System;

using System.Windows.Forms;

using System.Runtime.InteropServices;

using System.Security.Permissions;

 

namespace WebBrowserExtensibility

{

  [PermissionSetAttribute(SecurityAction.Demand, Name="FullTrust")]

  public class Form1 : Form

  {

    [STAThread]

    public static void Main()

    {

      Application.Run(new Form1());

    }

    private WebBrowser2 wb = new WebBrowser2();

    public Form1()

    {

      wb.Dock = DockStyle.Fill;

      wb.NavigateError += new

        WebBrowserNavigateErrorEventHandler(wb_NavigateError);

      Controls.Add(wb);

      wb.Navigate("www.widgets.microsoft.com");

    }

    private void wb_NavigateError(

      object sender, WebBrowserNavigateErrorEventArgs e)

    {

      // Display an error message to the user.

      MessageBox.Show("Cannot navigate to " + e.Url);

    }

  }

 

  public class WebBrowser2 : WebBrowser

  {

    AxHost.ConnectionPointCookie cookie;

    WebBrowser2EventHelper helper;

    [PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")]

    protected override void CreateSink()

    {

      base.CreateSink();

      helper = new WebBrowser2EventHelper(this);

      cookie = new AxHost.ConnectionPointCookie(

        this.ActiveXInstance, helper, typeof(DWebBrowserEvents2));

    }

 

    [PermissionSetAttribute(SecurityAction.LinkDemand, Name="FullTrust")]

    protected override void DetachSink()

    {

      if (cookie != null)

      {

        cookie.Disconnect();

        cookie = null;

      }

      base.DetachSink();

    }

    public event WebBrowserNavigateErrorEventHandler NavigateError;

    protected virtual void OnNavigateError(

      WebBrowserNavigateErrorEventArgs e)

    {

      if (this.NavigateError != null)

      {

        this.NavigateError(this, e);

      }

    }

    private class WebBrowser2EventHelper :

      StandardOleMarshalObject, DWebBrowserEvents2

    {

      private WebBrowser2 parent;

 

      public WebBrowser2EventHelper(WebBrowser2 parent)

      {

        this.parent = parent;

      }

 

      public void NavigateError(object pDisp, ref object url,

        ref object frame, ref object statusCode, ref bool cancel)

      {

        // Raise the NavigateError event.

        this.parent.OnNavigateError(

          new WebBrowserNavigateErrorEventArgs(

          (String)url, (String)frame, (Int32)statusCode, cancel));

      }

    }

  }

  public delegate void WebBrowserNavigateErrorEventHandler(object sender,

    WebBrowserNavigateErrorEventArgs e);

  public class WebBrowserNavigateErrorEventArgs : EventArgs

  {

    private String urlValue;

    private String frameValue;

    private Int32 statusCodeValue;

    private Boolean cancelValue;

 

    public WebBrowserNavigateErrorEventArgs(

      String url, String frame, Int32 statusCode, Boolean cancel)

    {

      urlValue = url;

      frameValue = frame;

      statusCodeValue = statusCode;

      cancelValue = cancel;

    }

 

    public String Url

    {

      get { return urlValue; }

      set { urlValue = value; }

    }

 

    public String Frame

    {

      get { return frameValue; }

      set { frameValue = value; }

    }

 

    public Int32 StatusCode

    {

      get { return statusCodeValue; }

      set { statusCodeValue = value; }

    }

 

    public Boolean Cancel

    {

      get { return cancelValue; }

      set { cancelValue = value; }

    }

  }

  [ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),

  InterfaceType(ComInterfaceType.InterfaceIsIDispatch),

  TypeLibType(TypeLibTypeFlags.FHidden)]

  public interface DWebBrowserEvents2

  {

    [DispId(271)]

    void NavigateError(

      [In, MarshalAs(UnmanagedType.IDispatch)] object pDisp,

      [In] ref object URL, [In] ref object frame,

      [In] ref object statusCode, [In, Out] ref bool cancel);

  }

}

</div>

l  WebBrowser. DocumentCompleted 事件

在 WebBrowser 控件完成加载文档时发生。

处理 DocumentCompleted 事件,在新文档完成加载时接收通知。如果 DocumentCompleted 事件发生,则新文档已完全加载,这意味着可以通过 Document、DocumentText 或 DocumentStream 属性访问该文档的内容。

2.2.   TabControl控件
TabControl 控件是Windows 窗体多个选项卡控件,这些选项卡类似于笔记本中的分隔卡和档案柜文件夹中的标签。选项卡中可包含图片和其他控件。您可以使用该选项卡控件来生成多页对话框,这种对话框在 Windows 操作系统中的许多地方(例如控制面板的“显示”属性中)都可以找到。

l  如何:将控件添加到选项卡页

tabPage1.Controls.Add(new Button()); 

l  如何:使用 Windows 窗体 TabControl 添加和移除选项卡

添加选项卡

string title = "TabPage " + (tabControl1.TabCount + 1).ToString();

TabPage myTabPage = new TabPage(title);

tabControl1.TabPages.Add(myTabPage);

</div>

移除选项卡

tabControl1.TabPages.Remove(tabControl1.SelectedTab); 

l  TabControl.DrawItem 事件

如果将 DrawMode 属性设置为 OwnerDrawFixed,则每当 TabControl 需要绘制它的一个选项卡时,它就会引发 DrawItem 事件。若要自定义选项卡的外观,请在用于 DrawItem 事件的处理程序中提供自己的绘制代码。

下面的代码示例创建一个包含一个 TabPage 的 TabControl。本示例声明一个事件处理程序,并用来在 tabPage1 的选项卡上绘制字符串和 Rectangle。该事件处理程序绑定到 DrawItem 事件。

using System.Drawing;

using System.Windows.Forms;

public class Form1 : Form

{

  private Rectangle tabArea;

  private RectangleF tabTextArea;

  public Form1()

  {

    TabControl tabControl1 = new TabControl();

    TabPage tabPage1 = new TabPage();

    tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;

    tabControl1.SizeMode = TabSizeMode.Fixed;

    tabControl1.Controls.Add(tabPage1);

    tabControl1.ItemSize = new Size(80, 30);

    tabControl1.Location = new Point(25, 25);

    tabControl1.Size = new Size(250, 250);

    tabPage1.TabIndex = 0;

    ClientSize = new Size(300, 300);

    Controls.Add(tabControl1);

    tabArea = tabControl1.GetTabRect(0);

    tabTextArea = (RectangleF)t



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#利用ReportViewer生成报表
  • C#基于正则去掉注释的方法示例
  • C#中new的用法及与override的区别分析
  • C#实现两个richtextbox控件滚动条同步滚动的简单方法
  • C# for循环的经典案例集锦
  • C#操作word的方法示例
  • C#使用WebClient登录网站并抓取登录后的网页信息实现方法
  • C# WinForm制作异形窗体与控件的方法
  • C#实现Excel表数据导入Sql Server数据库中的方法
  • C#使用NPOI上传excel

相关文章

  • 2017-05-28C#文件后缀名的详细介绍
  • 2017-05-28C#实现将记事本中的代码编译成可执行文件的方法
  • 2017-05-28C#面向对象设计的七大原则
  • 2017-05-28C#实现漂亮的数字时钟效果
  • 2017-05-28C#中循环语句:while、for、foreach的使用
  • 2017-05-28C#属性(Attribute)用法实例解析
  • 2017-05-28浅谈C#2.0泛型中的变化:default关键字
  • 2017-05-28关于C# TabPage如何隐藏的问题
  • 2017-05-28C#实现汉字转换为拼音缩写的代码
  • 2017-05-28C#中使用反射获取结构体实例及思路

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中static静态变量的用法实例
    • 浅谈C#设计模式之代理模式
    • C#使用yield关键字让自定义集合实现foreach遍历的方法
    • 为何Linq的Distinct实在是不给力
    • C#中类与结构的区别实例分析
    • WinForm DataGridView控件隔行变色的小例子
    • c#线程Thread示例
    • C#中的尾递归与Continuation详解
    • C#使用非托管代码直接修改字符串的方法
    • VS2010写的程序在自己电脑可以运行、其他电脑上不能运行的解决方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有