webbrowser 控件实现WinForm与WebForm交互

2021-07-05 13:04

阅读:482

YPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

标签:wim   生成   handle   指令   get   value   一个   dom   应用程序   

 WebBrowser 控件可以让你装载Windows Form 应用程序中的 Web 网页和其它采用浏览器的文件。可以使用webbrowser 控件将现有的web框架控制项加入至 Windows Form 客户端应用程序。
还是直接看代码吧。

WebBrowser 控制项 提供的属性、方法和事件,可用来实现 Internet Explorer 的控制项
    webBrowser1.Navigate("www.cnblogs.com");    //将指定位置处的文件载入至 WebBrowser
    
webBrowser1.GoBack();//上一页
    webBrowser1.GoForward();//下一页
    webBrowser1.Refresh();//刷新
    webBrowser1.GoHome();//主页
这里提供了WebBrowser常用的方法,
    

上面的代码是将 我们园子的主页载入到WebBrowser控件中。如果我们想要在应用程式中产生自己的网页内容,可以设定DocumentText属性。也可以通过Document属性来处理目前的网页内容。如下代码是使用 DocumentText 属性,显示网页内容。并用Document属性来处理所显示的网页。

 1技术分享图片private void btnDocumentText_Click(object sender, EventArgs e)
 2技术分享图片        {
 3技术分享图片            string szHtml = @"
 4技术分享图片
 5技术分享图片
 6技术分享图片 DocumentText 
 7技术分享图片
 8技术分享图片
 9技术分享图片
10技术分享图片     Please enter your name:

11技术分享图片     

12技术分享图片    Send input to method of Form class
13技术分享图片     
14技术分享图片
15技术分享图片";
16技术分享图片
17技术分享图片            webBrowser1.DocumentText = szHtml;
18技术分享图片          
19技术分享图片        }
20技术分享图片
21技术分享图片        private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
22技术分享图片        {
23技术分享图片            System.Windows.Forms.HtmlDocument document =  this.webBrowser1.Document;
24技术分享图片
25技术分享图片            if (document != null && document.All["Name"] != null && String.IsNullOrEmpty(document.All["Name"].GetAttribute("value")))
26技术分享图片            {
27技术分享图片                e.Cancel = true;
28技术分享图片                System.Windows.Forms.MessageBox.Show("You must enter your name before you can navigate to " +  e.Url.ToString());
29技术分享图片            }
30技术分享图片
31技术分享图片        }


既然我们可以通过DocumentText生成自己的网页,那么能不能象使用IE那样操作这个网页呢?,答案是肯定的,完全可以像操作Web程序那样操作WebBrowser 控制项。比如我们可以加入脚本,CSS。当然,如果你熟悉 HTML 物件对象模型 (DOM),也可以透过 Document 属性来处理目前的Web网页内容。下面的例子加入了JavaScript脚本来控制网页。如果要在Winfrom程序中写大量的Javascriot代码,而且这些代码最终要转换成String型载入到Webbrowser 那将是很痛苦的事情,不过没有关系,我们可以创建一个js文件,放入资源中,用的时候只需从资源中载入即可。这里我创建一个名为 ClientScript.js 的文件。

 1技术分享图片

 

技术分享图片string szClientScript = ManagedWebBrowser.Properties.Resources.ResourceManager.GetString("ClientScript");
技术分享图片
技术分享图片            string szWebBrowserText = "" +
技术分享图片                "" +
技术分享图片                ""+                
技术分享图片                    szClientScript +
技术分享图片                 "" +
技术分享图片               ""+
技术分享图片               
技术分享图片               "Please enter your name:
"+
技术分享图片                 "
"+
技术分享图片                 "Click Here"+
技术分享图片                "";
技术分享图片
技术分享图片
技术分享图片            webBrowser1.DocumentText = szWebBrowserText;

WebBrowser 是 System.Windows.Forms 下的控制项,也就是意味着它是用在WimForm程序下,那么WebWrower所载入的Web页面如何实现在WinForm程序下处理呢。例如上例中的 "Click Here" 。这里的Click事件是通过脚本处理的,如何让这个Click事件在Winform中处理呢?这里要做一些修改。若要从指令码存取用户端应用程式,需要设定ObjectForScripting 属性。指令码可以将您指定的物件当做window.external 物件来存取。

使用ObjectForScripting属性,可启用 WebBrowser 控制项所装载之 Web 网页与包含 WebBrowser 控制项之应用程式间的通讯。
这个属性可让您整合动态超文字标记语言 (DHTML) 程式码与用户端应用程式程式码。
指定给这个属性的物件可让 Web 网页指令码做为 window.external 物件,这个物件是为了存取主应用程式而提供的内建 DOM 物件。

 

 1技术分享图片 private void btnScriptEvent_Click(object sender, EventArgs e)
 2技术分享图片        {
 3技术分享图片
 4技术分享图片            // This is the handler for loading the script into the Web Browser control and allowing us to interact
 5技术分享图片            // between the script in the Browser control and this form class
 6技术分享图片
 7技术分享图片
 8技术分享图片            // Set the ObjectForScripting property of the Web Browser control to point to this form class
 9技术分享图片            // This will allow us to interact with methods in this form class via the window.external property 
10技术分享图片            webBrowser1.ObjectForScripting = this;
11技术分享图片
12技术分享图片            string szWebBrowserText = "" +
13技术分享图片                "" +
14技术分享图片                ""+                    
15技术分享图片                 "" +
16技术分享图片               ""+
17技术分享图片               
18技术分享图片               "Please enter your name:
"+
19技术分享图片                 "
"+
20技术分享图片                 "Click Here"+
21技术分享图片                "";
22技术分享图片
23技术分享图片
24技术分享图片            webBrowser1.DocumentText = szWebBrowserText;
25技术分享图片        }
26技术分享图片        public void ClickEvent(string userName)
27技术分享图片        {
28技术分享图片            // Simply echo out the name that the user typed in the input box of the HTML page
29技术分享图片            if (System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.IsRightToLeft == true)
30技术分享图片                MessageBox.Show("Hello " + userName, "Managed Web Browser Sample", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
31技术分享图片            else
32技术分享图片                MessageBox.Show("Hello " + userName, "Managed Web Browser Sample", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
33技术分享图片
34技术分享图片        }

 


 这里的ObjectForScripting 属性设置为 this。注意:在From1 类的开头加入了这么一句[ComVisible(true)], 它在System.Runtime.InteropServices下,预设值为 true,指出 Managed 型别对于 COM 为可见的。

 [ComVisible(true)]
 public partial class Form1 : System.Windows.Forms.Form

webbrowser 控件实现WinForm与WebForm交互

标签:wim   生成   handle   指令   get   value   一个   dom   应用程序   

原文地址:https://www.cnblogs.com/asdyzh/p/9826601.html


评论


亲,登录后才可以留言!