zoukankan      html  css  js  c++  java
  • 在.net中利用webbrowser控件实现WinForm与WebForm交互

    在.net中利用webbrowser控件实现WinForm与WebForm交互
    本文来自: IT知道网(http://www.itwis.com) 详细出处参考:http://www.itwis.com/html/net/winform/20080629/1884.html

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

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

    上面的代码是将 我们园子的主页载入到WebBrowser控件中。如果我们想要在应用程式中产生自己的网页内容,可以设定DocumentText属性。也可以通过Document属性来处理目前的网页内容。如下代码是使用 DocumentText 属性,显示网页内容。并用Document属性来处理所显示的网页。
     1private 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>";
    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">
     2function ClickEvent(name)
     3{
     4    alert("Hello: " +name);
     5}
     6
     7function 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(Name.value)'>Click Here</font>" 。这里的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
     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 = "<html>" +
    13                "<head>" +
    14                "<title></title>"+                   
    15                 "</head>" +
    16               "<body onkeydown=\"KeyDown()\" oncontextmenu=\"event.returnValue=false\">"+
    17              
    18               "Please enter your name:<br/>"+
    19                 "<input type='text' name='Name'/><br/>"+
    20                 "<font onClick='window.external.ClickEvent(Name.value)'>Click Here</font>"+
    21                "</body></html>";
    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程序下与Web页面的交互使用。

  • 相关阅读:
    定义 : angular view 和controller 之前的 ng-init 由谁来负责
    pl/sql如何在云端服务器上新建数据库
    oracle连接服务器上数据库
    svn check下来的代码在eclipse中没有run on server
    sql server在修改表结构后不能保存
    用mybatis-generator自动生成代码报“前言中不允许有内容”
    启动Tomact时报failed to start conponent
    spring MVC中controller失效
    maven项目中连接sqlserver和mysql的区别
    DBCP连接池的配置
  • 原文地址:https://www.cnblogs.com/zzh1236/p/1355404.html
Copyright © 2011-2022 走看看