C#网页软件交互必备

3、使用WebBrowser控件

WebBrowser控件就是ActiveX Controls的一种,它是Mircosoft在.Net出现之前提供的ActiveX控件,用来为应用程序增加浏览功能,具备这个功能的基础是该控件对应的Dll(Shdocvw.dll)文件是Internet Explorer 的一部分,所以它能够在安装了 Internet Explorer 的系统上提供支持。

象其他ActiveX Control一样,Visual Studio.Net IDE工具箱在默认情况下并不直接包含WebBrowser控件。不过,在应用程序中添加该控件很简单。在Visual Studio.Net 开发环境下,在"工具箱"的"Windows 窗体"上点击鼠标右键,从弹出的上下文菜单中选择"自定义工具箱",在随后出现的"自定义工具箱"对话框的"com组件"标签里选中"Microsoft Web 浏览器",确定后,"Iexplorer"控件就会显示在工具箱中,它其实就是一个WebBrowser控件。这之后,象使用Windows标准控件一样,把Iexplorer控件拖入应用程序的窗体就可以了。Visual Stuod.Net IDE将自动生成所需要的部分COM代码,同时,C# windows应用程序也将自动添加AxSHDocVw及SHDocVx引用(你可以在应用程序解决方案管理器"引用"项下看到它们),分别对应于磁盘上的Interop.SHDocVw.dll和AxInterop.SHDocVw.dll文件(你可以在应用程序\Bin\Debug目录下找到它们)。同时,代码也将自动创建 AxSHDocVw.AxWebBrowser 实例对象,并设置默认名称为axWebBrowser1(语句:private AxSHDocVw.AxWebBrowser axWebBrowser1)。(为引用简化名称,可导入名字空间using AxWebBrowwer)

经过这些处理后,应用程序就已经成为WebBrowser控件的客户端了。WebBrowser控件能够浏览到任何指定位置的资源,包括本地文件系统、局域网上的文件系统及互联网所定位的资源。实际上,WebBrowser 控件定位到一个.Html 页,该页(隐式)调用 window.open 方法以打开一个新窗口。

1)、WebBrowser控件的事件

WebBrowser控件包含丰富的事件,用来捕捉与控件相关的变化并作出反应。其中,BeforeNavigate 2事件在对指定对象(窗体或框架元素)导航前激活,这个特性常被用来作一些验证工作,比如对客户录入的Url地址作有效性检查,以转换不标准的Url地址,有意义的是,这样的验证转换工作是自动完成的。例如,如果你输入的Url为"www.ccidnet.com",在该事件中引用Url属性就可以自动将它转换为标准格式的Url"http://www.ccidnet.com",并自动将转换结果存入事件的URL参数中。事件代码为:

private void axWebBrowser1_BeforeNavigate2(object sender, AxSHDocVw.DWebBrowserEvents2_BeforeNavigate2Event e){textBoxUrl.Text=e.uRL.ToString();//textBoxUrl是文本框名,用来反映效果}

另外,WebBrowser控件的DocumentComplete事件在文档载入及初始化完成时激活;NewWindow事件在创建新窗体时被激活,等等。

2)、WebBrowser控件的方法

同时,WebBrowser控件也包含大量方法,可以完成导航中的大部分操作。其中,GoBack()从历史记录表回退一个单元,GoForward()从历史记录表前进一个单元,GoHome() 定位到当前主页面或开始页,Stop()取消正进行的导航请求(包括下载操作)并停止任何动态页面元素(比如背景音乐)、Refresh ()可以刷新页面等等。

这些只是WebBrowser控件所支持方法的一部分,即便是这样,也可以看出,这些方法使你可以建立与Microsoft Internet Explorer功能类似的应用程序,你只需要做很少的工作,或许仅仅是响应按钮的事件。例如,在你的应用程序中添加一个"回退"按钮 buttonBack,其Click事件代码为:

private void buttonBack_Click(object sender, System.EventArgs e){ axWebBrowser1.GoBack();//axWebBrowser1是WebBrowser实例控件名}

这样,类似IE浏览器的"后退"功能就实现了,你基本上没有做什么工作。

然而,在WebBrowser控件的所有方法中,Navigate()才是极主要的一个方法,真正的导航是依靠调用它来实现的。Navigate()方法能够导航到通过url指定的资源或者通过一个完整路径给出的文件路径(本地的或者网络上的文件)。方法的定义为:

object.Navigate( url As String, [Flags As Variant,] [TargetFrameName As Variant,] [PostData As Variant,] [Headers As Variant])

其中,参数url是必须的的字符串表达式,用于定位要访问的资源,它可以是一个URL地址,也可以是一个完整的路径文件名,或者通过UNC(Universal Naming Convention)定位的资源。其余参数均为可选参数,其中Flags标识指示是否将资源添加到历史记录、是否从高速缓冲中读写资源数据以及是否在一个新的窗口中显示资源文件;而TagetFrameName主要用于带框架的URL在浏览器窗口中的显示,其可能的选项为:Blank(在新的空白窗口中显示)、PARENT(在当前窗口的父窗口显示)、SELF(在当前窗口显示)、TOP(在当前窗口主体装载链接)等;PostData参数用于指定以Post发送的、随Http请求的的数据;Header则包含Http请求的头信息。

需要注意的是,作为ActiveX Control,WebBrowser控件提供之初并不针对.Net架构,所以并不能保证它与所有支持.Net的开发语言完全无缝集成。比如,VisualC#语言是不支持可选参数的,因此,在Visual C#开发的Windows Application中调用WebBrowser控件的Navigate()方法时,所有的参数均需要明确地给出来,并且,这些可选参数均是引用类型(ref)。

继续扩展上面的例子,添加"buttonGo"按钮,输入Click事件代码为:

private void buttonGo_Click(object sender, System.EventArgs e){ string url=comboBoxUrl.Text;//取Url值 object o=null;//定义空的对象引用 axWebBrowser1.Navigate(url,ref o,ref o,ref o,ref o);//浏览到指定资源 }

单击"Go"按钮,应用程序窗体中输出正确的资源,Web页被正确显示。

前面说了,Navigate()方法也能够导航到指定的文件,接着上面的应用程序,在窗体上添加"buttonFile"按钮,其Click事件代码为:

private void buttonFile_Click(object sender, System.EventArgs e){ OpenFileDialog ofd=new OpenFileDialog();//实例化"打开文件"对话框对象 if(ofd.ShowDialog()==DialogResult.OK) { Object o = null;//设置空对象 axWebBrowser1.Navigate(ofd.FileName, ref o, ref o, ref o, ref o);//浏览指定文件 }}

这样,在通过"文件打开"对话框指定文件后,WebBrowser控件就可以导航到文件对应的资源。

除Navigate()方法外,WebBrowser控件还有许多重要的方法,比如,ExecWB()方法在OLE对象上执行命令并通过IOleCommandTarget 接口返回命令执行的状态。

3)、使用WebBrowser控件开发浏览器应用程序

从上面我们知道,使用WebBrowser控件的Navigate方法能够通知浏览器定位到指定的资源。这甚至能支持你开发出具有完整功能的浏览器应用程序。这时,你的应用程序中或许需要添加其他windows标准控件:主菜单、用于导航控制的按钮、用于提示的状态条、用于进度的进度条。当然,由组合文本框及go按钮组成的地址栏是必不可少的。同时,在windows应用程序中,添加对话框是很容易的(在asp.net中可不这么简单)。不用担心,从上面的论述已经可以看出,实现这些控件的功能只需要简单的代码。

4)、WebBrowser控件作为其他ActiveX控件的容器

除此之外,WebBrowser控件也常用作应用程序窗体显示ActiveX文档的容器,如果你企图在Visual C# Windows Application 中打开Office文档,就需要使用WebBrowser控件。这时,使用传入 WebBrowser 对象的 Document 属性来获得对 Office 文档对象的引用。不过,由于WebBrowser控件不支持菜单合并,在试图添加多个WebBrowser控件并各自打开ActiveX文档时会引发一些问题,要小心。

5)、使用WebBrowser控件的优点

· WebBrower控件以异步方式加载,调用 WebBrowser1.Navigate 时,资源完全加载完之前该调用将

控制权返回到 Visual C# 应用程序,Navigate方法实际上在后台完成了以下两方面的工作:发送http请求和显示输出。

· WebBrowser控件不改变资源原有的导航方式(链接方式不变)。

· WebBrowser控件在需要的时候自动添加滚动条。

· WebBrowser控件自动作为资源显示的容器,不再需要其他显示控件。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值