您的位置:首页 > Web前端 > JavaScript

webbrowser 控件实现WinForm与WebForm交互

2009-08-08 02:00 519 查看

webbrowser 控件实现WinForm与WebForm交互

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

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

private void btnDocumentText_Click(object sender, EventArgs e)
 2



        

{
 3

            string szHtml = @"
 4

<HTML>
 5

<HEAD>
 6

<TITLE> DocumentText </TITLE>
 7

</HEAD>
 8


 9

<BODY>
10

     Please enter your name:<br/>
11

     <input type='text' name='Name'/><br/>
12

    <a href='http://www.microsoft.com' >Send input to method of Form class</a>
13

     
14

</BODY>
15

</HTML>";
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

<script language = "javascript">
 2

function ClickEvent(name)
 3





{
 4

    alert("Hello: " +name);
 5

}
 6


 7

function KeyDown()
 8






 9

    if (event.keyCode==116)
10



    

{
11

         event.keyCode=0;
12

         event.returnValue=false;
13

    }
14

  
15

      return false;
16

}


string szClientScript = ManagedWebBrowser.Properties.Resources.ResourceManager.GetString("ClientScript");




            string szWebBrowserText = "<html>" +


                "<head>" +


                "<title></title>"+                


                    szClientScript +


                 "</head>" +


               "<body onkeydown=/"KeyDown()/" oncontextmenu=/"event.returnValue=false/">"+


               


               "Please enter your name:<br/>"+


                 "<input type='text' name='Name'/><br/>"+


                 "<font onclick = 'ClickEvent(Name.value)'>Click Here</font>"+


                "</body></html>";






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

物件来存取。

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

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

结束语:
本文简单的介绍了 WebBrowser 的用法,实现了WinForm程序下与Web页面的交互使用。本人在院子里一直以来都是看客,这是第一次在园子里留下技术足迹。有不妥之处,还望各位朋友指正。
感谢您能看到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息