代码改变世界

2012/5/26日志

2012-05-26 16:57  javaspring  阅读(249)  评论(0编辑  收藏  举报

1  想在winform中显示map及各种操作等:

          方法一:

                 可以在winform上使用webBrowser的,然后webBrowser的url属性指向本地的某一个你需要的.html文件.

          方法二:

                  可以在winform上使用webBrowser的,然后设置url的属性指向“http://.....”.

   但是对于第一种方法而言,绝对地址很容易造成麻烦,解决的方案:           

   string address=System.AppDomain.CurrentDomain.BaseDirectory+"baidumap.html";
   this.webBrowser1.Url = new System.Uri(address,System.UriKind.Absolute);

    在嵌入webBrowser控件的winform的—designer,cs文件中:

   嵌入webBrowser时,设置其url属性为“D:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\baidumap.html”(这里貌似只能使用网页的绝对地址,而没有相对地址可用),这时可在winform的cs文件中修改:

    // BaiduMapDemo.Designer.cs
    #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
       {
            //省略.....
            string address=System.AppDomain.CurrentDomain.BaseDirectory+"baidumap.html"; 
            this.webBrowser1.Url = new System.Uri(address, System.UriKind.Absolute);
            //记住这里设置仍然是“绝对地址”
            //省略
        }

    注意:将baidumap.html文件放在debug位置下面!!!!

2    js与c#之间函数的相互调用: 

         在Form类定义前面加入:

       [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
       [System.Runtime.InteropServices.ComVisibleAttribute(true)]
      //这是为了将该类设置为com可访问。如果不进行该声明将会出错。

winform控件webbrowser和js脚本互调


修改webbrowser的属性使c#可以调用js方法:如果要传值,则可以定义object[]数组。具体方法如下例子:首先在js中定义被c#调用的方法:

与脚本的互操作 首先是调用Web页面的脚本中已经定义好的函数。假设HTML中有如下Javascript:

 function DoAdd(a, b) {
    return a + b;
}

那么,我们要在.cs文件中调用它,只需如下代码即可:

   object oSum = webBrowser.Document.InvokeScript("DoAdd", new object[] { 1, 2 });
   int sum = Convert.ToInt32(oSum);

其次,如果我们想执行一段Web页面中原本没有的脚本,该怎么做呢?这次.Net的类没有提供,看来还要依靠COM了。IHTMLWindow2可以将任意的字符串作为脚本代码来执行。

string scriptline01 = @"function ShowPageInfo() {";

string scriptline02 = @"      var numLinks = document.links.length; ";

string scriptline03 = @"      var numForms = document.forms.length; ";

string scriptline04 = @"      var numImages = document.images.length; ";

string scriptline05 = @"      var numScripts = document.scripts.length; ";

string scriptline06 = @"      alert('网页的统计结果:\r\n链接数:' + numLinks + ";

string scriptline07 = @"         '\r\n表单数:' + numForms + ";

string scriptline08 = @"         '\r\n图像数:' + numImages + ";

string scriptline09 = @"         '\r\n脚本数:' + numScripts);}";

string scriptline10 = @"ShowPageInfo();";

 

string strScript = scriptline01 + scriptline02 + scriptline03 + scriptline04 + scriptline05 +

                    scriptline06 + scriptline07 + scriptline08 + scriptline09 + scriptline10;

 

IHTMLWindow2 win = (IHTMLWindow2)webBrowser.Document.Window.DomWindow;

win.execScript(strScript, "Javascript")