锁定老帖子 主题:在C#窗体应用程序中载入Web页
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-06-19
用AxWebBrowser的准备 "工具箱"->"添加/删除项"->"COM 组件"->"Microsoft Web 浏览器"->对勾->确定
我们知道,C#创建基于Web页(Html)的AspC#应用程序,它使用Microsoft Internet Explorer(IE)实现页面的导航与浏览,对程序的导航控制通过IE自身提供的功能来实现,这个时候,导航控制实际上与程序代码是相对独立的,这表现在你不需要为此编制相应的代码也很难添加IE之外的其他控制。 其实,不仅仅是C#应用程序能操作Web页,C#创建的基于桌面的Windows Application(窗体应用程序)也能操作Web页。不同的是,这种开发仅有C#基类支持是不够的,你还需要借助一种特殊的COM-ActiveX控件。
即便这样,C#名字空间Diagnostics还是提供了类Process以支持在应用程序中操作Web文件、实现Internet Explorer界面样式,以部分满足我们的需求。 1、使用Process 类 下面的讲解将借助实例来进行,并逐步扩充程序代码。为测试效果,请在Visual StudioC# IDE中构建VisualC#窗体应用程序WebPageInWindowsApplicaion。在窗体上添加按钮"buttonStart",添加文本框"textBoxUrl" ,导入名字空间System.Diagnostics(using System.Diagnostics;),在按钮"buttonStart"的Click事件中添加以下代码: 代码很简单,每行后的注释足够可以解释清楚了。需要注意的是,在使用Process.Start()方法启动该进程前至少必须设置FileName文件名属性,以指定提供支持的目标应用程序或文档。试着在文本框中输入"http://developer.ccidnet.com/pub/disp/Column?columnID=287"(当然,你也可以在程序中硬编码文本框内容,无论怎样,你需要确保该URL的有效性),单击Start按钮,IE浏览器将打开,Web页面被正确显示。 不过,你很容易就能看到,打开的IE浏览器并不包含在应用程序(主)窗体中,而是重新载入了IE浏览器,就象你通常在IE地址栏里输入URL浏览页面一样;的确,在这里,IE浏览器被作为一个新的、单独的窗口打开,这以后就不再与应用程序关联,或者说,不再受应用程序的控制了。一般地,这不是我们所需要的。 要真正让Web页与应用程序融为一体,一种可行的解决方法是使用ActiveX Control-WebBrowser控件。 2、ActiveX 技术 很明显,即便C#富含大量类库,但仍然不能完成所有的任务,或者说,不能很轻松地完成所有任务。很长一段时间里,由Windows API、COM(COM+)、ActiveX Control提供的许多功能在C#中将得到支持,使用它们在一定程度上为编程提供简化。 其中,ActiveX是Microsoft提出的一组使用COM(Component Object Model,组件对象模型)使软件部件在特定环境中进行交互的技术集。它与具体的编程语言无关。作为针对Internet应用开发的技术,ActiveX被广泛应用于WEB服务器以及客户端的各个方面。同时,ActiveX技术也被用于方便地创建普通的桌面应用程序。 3、使用WebBrowser控件 WebBrowser控件就是ActiveX Controls的一种,它是Mircosoft在C#出现之前提供的ActiveX控件,用来为应用程序增加浏览功能,具备这个功能的基础是该控件对应的Dll(Shdocvw.dll)文件是Internet Explorer 的一部分,所以它能够在安装了 Internet Explorer 的系统上提供支持。 象其他ActiveX Control一样,Visual StudioC# IDE工具箱在默认情况下并不直接包含WebBrowser控件。不过,在应用程序中添加该控件很简单。在Visual StudioC# 开发环境下,在"工具箱"的"Windows 窗体"上点击鼠标右键,从弹出的上下文菜单中选择"自定义工具箱",在随后出现的"自定义工具箱"对话框的"com组件"标签里选中"Microsoft Web 浏览器",确定后,"Iexplorer"控件就会显示在工具箱中,它其实就是一个WebBrowser控件。这之后,象使用Windows标准控件一样,把Iexplorer控件拖入应用程序的窗体就可以了。Visual StuodC# 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, 2)、WebBrowser控件的方法 同时,WebBrowser控件也包含大量方法,可以完成导航中的大部分操作。其中,GoBack()从历史记录表回退一个单元,GoForward()从历史记录表前进一个单元,GoHome() 定位到当前主页面或开始页,Stop()取消正进行的导航请求(包括下载操作)并停止任何动态页面元素(比如背景音乐)、Refresh ()可以刷新页面等等。 这些只是WebBrowser控件所支持方法的一部分,即便是这样,也可以看出,这些方法使你可以建立与Microsoft Internet Explorer功能类似的应用程序,你只需要做很少的工作,或许仅仅是响应按钮的事件。例如,在你的应用程序中添加一个"回退"按钮 buttonBack,其Click事件代码为: private void buttonBack_Click(object sender, System.EventArgs e) 然而,在WebBrowser控件的所有方法中,Navigate()才是极主要的一个方法,真正的导航是依靠调用它来实现的。Navigate()方法能够导航到通过url指定的资源或者通过一个完整路径给出的文件路径(本地的或者网络上的文件)。方法的定义为: object.Navigate( url As String, [Flags As Variant,] [TargetFrameName As 需要注意的是,作为ActiveX Control,WebBrowser控件提供之初并不针对C#架构,所以并不能保证它与所有支持C#的开发语言完全无缝集成。比如,VisualC#语言是不支持可选参数的,因此,在Visual C#开发的Windows Application中调用WebBrowser控件的Navigate()方法时,所有的参数均需要明确地给出来,并且,这些可选参数均是引用类型(ref)。 继续扩展上面的例子,添加"buttonGo"按钮,输入Click事件代码为: private void buttonGo_Click(object sender, System.EventArgs e) 前面说了,Navigate()方法也能够导航到指定的文件,接着上面的应用程序,在窗体上添加"buttonFile"按钮,其Click事件代码为: private void buttonFile_Click(object sender, System.EventArgs e) 除Navigate()方法外,WebBrowser控件还有许多重要的方法,比如,ExecWB()方法在OLE对象上执行命令并通过IOleCommandTarget 接口返回命令执行的状态。 3)、使用WebBrowser控件开发浏览器应用程序 从上面我们知道,使用WebBrowser控件的Navigate方法能够通知浏览器定位到指定的资源。这甚至能支持你开发出具有完整功能的浏览器应用程序。这时,你的应用程序中或许需要添加其他windows标准控件:主菜单、用于导航控制的按钮、用于提示的状态条、用于进度的进度条。当然,由组合文本框及go按钮组成的地址栏是必不可少的。同时,在windows应用程序中,添加对话框是很容易的(在aspC#中可不这么简单)。不用担心,从上面的论述已经可以看出,实现这些控件的功能只需要简单的代码。 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控件自动作为资源显示的容器,不再需要其他显示控件。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 3924 次