有时候我们需要用到C#和html文件间的相互传值,如此时我们希望通过一个html文件通过高德地图的提供的接口来获取当前坐标点周围的道路信息和兴趣点信息,用于显示在GMap.Net控件上,则可以通过webBrowser控件方便的实现。

webBrowser

WebBrowser 是一个 .NET 控件类,使用户可以在窗体中导航网页。WebBrowser 控件会占用大量资源。使用完该控件后一定要调用 Dispose 方法,以便确保及时释放所有资源。必须在附加事件的同一线程上调用 Dispose 方法,该线程应始终是消息或用户界面 (UI) 线程。

首先我们拖一个webBrowser控件到界面中,并在页面加载时加载html文件到webBrowser控件中

//加载逆解析地址的html
webBrowser.Navigate("C:\\findinfo.html");
//屏蔽webBrowser浏览器右键菜单
webBrowser.IsWebBrowserContextMenuEnabled = false;
//修改webbrowser的属性使c#可以调用js方法:
webBrowser.ObjectForScripting = this;

C#传值给HTML

若C#传递objects的值给html里的函数里的变量CurLat, CurLng,则可通过如下代码实现:

webBrowser.Document.InvokeScript("mapInit", objects);
 function mapInit(CurLat, CurLng) {}

为实现上述功能,下面给出将当前目标点的经纬度通过C#传递给html的整体函数

C#中传递值给html里的函数

object[] objects = new object[2];
//当前纬度
objects[0] = share_data.CurLat;
//当前经度
objects[1] = share_data.CurLng;
//传值给html中的mapInit函数
webBrowser.Document.InvokeScript("mapInit", objects);

html文件script中对应的maptnit函数

 //初始化加载地图并进行地址逆解析function mapInit(CurLat, CurLng) {//默认定位:初始化加载地图时,center及level属性缺省,地图默认显示用户所在城市范围mapObj = new AMap.Map('iCenter');var lnglatXY = new AMap.LngLat(CurLng, CurLat);//document.getElementById('result').innerHTML = "您输入的是:" + key_1;//加载地理编码插件mapObj.plugin(["AMap.Geocoder"], function () {MGeocoder = new AMap.Geocoder({radius: 1000,extensions: "all"});//返回地理编码结果AMap.event.addListener(MGeocoder, "complete", geocoder_CallBack2);//逆地理编码MGeocoder.getAddress(lnglatXY);});//在webBrowser上显示信息mapObj.setFitView();};

HTML传值给C#

若需要把html的函数中的变量locateinfo传值给C#的函数LocateInfo,则可以通过如下语句实现:

window.external.LocateInfo(locateinfo);

此时,在html中得出的坐标点周围的道路信息和兴趣点信息为字符串的格式,我们可将整个字符串传回C#中再对字符串分割便能得到我们需要的周围所有道路信息和兴趣点信息

对字符串的分割可根据字符串的特征进行分割,在这里,道路与兴趣点的字符串之间通过’\n\n’区分,道路与兴趣点之间的每条信息可通过’\n’区分

string[] RoadPoiDiv = message.Replace("\n\n", "-").Split('-');
string RoadInfo = RoadPoiDiv[0];
string PoiInfo = RoadPoiDiv[1];
//每个道路名称
Roadshow = RoadInfo.Split('\n');
//每个兴趣点名称
Poishow = PoiInfo.Split('\n');

下面给出html文件返回当前坐标点周围的道路信息和兴趣点信息的函数以及C#中对返回信息进行分割的函数

返回整体结果

 function geocoder_CallBack2(data) { //回调函数var resultStr = "";var roadinfo ="";var poiinfo="";var address;var locateinfo = "";var showinfo = "";//返回地址描述address = data.regeocode.formattedAddress;//返回周边道路信息roadinfo +="<table style='width:600px'>";for(var i=0;i<data.regeocode.roads.length;i++){var color = (i % 2 === 0 ? '#fff' : '#eee');roadinfo += "<tr style='background-color:" + color + "; margin:0; padding:0;'><td>道路:" + data.regeocode.roads[i].name + "</td><td>方向:" + data.regeocode.roads[i].direction + "</td><td>距离:" + data.regeocode.roads[i].distance + "米</td></tr>";//周边道路经纬度信息locateinfo += data.regeocode.roads[i].location.toString() + "\n";//道路名称showinfo += "道路:" + data.regeocode.roads[i].name + "\n";}roadinfo +="</table>"//返回周边兴趣点信息poiinfo += "<table style='width:600px;cursor:pointer;'>";         for(var j=0;j<data.regeocode.pois.length;j++){var color = j % 2 === 0 ? '#fff' : '#eee';poiinfo += "<tr onmouseover='onMouseOver(\"" + data.regeocode.pois[j].location.toString() + "\")' style='background-color:" + color + "; margin:0; padding:0;'><td>兴趣点:" + data.regeocode.pois[j].name + "</td><td>类型:" + data.regeocode.pois[j].type + "</td><td>距离:" + data.regeocode.pois[j].distance + "米</td></tr>";//周边兴趣点经纬度信息locateinfo += "\n" + data.regeocode.pois[j].location.toString();//周边兴趣点名称showinfo += "\n" + "兴趣点:" + data.regeocode.pois[j].name;}poiinfo += "</table>";//返回结果拼接输出resultStr = "<div style=\"font-size: 12px;padding:0px 0 4px 2px; border-bottom:1px solid #C1FFC1;\">"+"<b>地址</b>:"+ address + "<hr/><b>周边道路信息</b>:<br/>" + roadinfo + "<hr/><b>周边兴趣点信息</b>:<br/>" + poiinfo +"</div>";document.getElementById("result").innerHTML = resultStr;//将经纬度信息传回c#window.external.LocateInfo(locateinfo);//将名称信息传回window.external.ShowInfo(showinfo);}

将返回的信息进行进行分割

//html传回C#的经纬度信息并进行分割public void LocateInfo(string message){//区分道路和兴趣点string[] RoadPoiDiv = message.Replace("\n\n", "-").Split('-');string RoadInfo = RoadPoiDiv[0];string PoiInfo = RoadPoiDiv[1];//每个道路经纬度string[] RoadLocate = RoadInfo.Split('\n');//每个兴趣点经纬度string[] PoiLocate = PoiInfo.Split('\n');//清除之前的所有图层的标记点foreach (var layer in gmap.Overlays){layer.Markers.Clear();}//在地图上为每个道路打标记SetLableOnMap(RoadLocate, 0);//在地图上为每个兴趣点打标记SetLableOnMap(PoiLocate, 1);}//每个道路名称string[] Roadshow;//每个兴趣点名称string[] Poishow;//html传回C#的名称信息并进行分割  ####未写完public void ShowInfo(string message){//区分道路和兴趣点string[] RoadPoiDiv = message.Replace("\n\n", "-").Split('-');string RoadInfo = RoadPoiDiv[0];string PoiInfo = RoadPoiDiv[1];//每个道路名称Roadshow = RoadInfo.Split('\n');//每个兴趣点名称Poishow = PoiInfo.Split('\n');}

C#|通过webBrowser控件实现与html间的相互传值相关推荐

  1. 【转载】c#多线程使用webbrowser控件

    本来打算在完成事件中分析页面的,可是郁闷了半天,根本就没有完成处理函数的调用,搜索得到解决,在此感谢原文作者http://www.soaspx.com/dotnet/csharp/csharp_201 ...

  2. WebBrowser控件参数解释

    方法 说明 GoBack '相当于IE的"后退"按钮,使你在当前历史列表中后退一项 GoForward ' 相当于IE的"前进"按钮,使你在当前历史列表中前进一 ...

  3. C# webbrowser控件点击页面按钮

    用金山快盘时需要每天签到挣空间容量,一直都想写个定时程序实现,然后挂到实验室的服务器上.通过参考网上一些资料,自己动手实现一个利用webbrowser控件实现了自动点击网页按钮的功能,其实很简单的,下 ...

  4. c#中WebBrowser控件的使用方法

    首先先来简单介绍一下webbrowser控件,这个控件是可以实现在form窗体中添加网页内容的.如图,我在form中加入了百度api,(百度地图api调用博客里有讲) 使用这个控件其实很简单 (1)第 ...

  5. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件

    WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗口的,那么它会生生的弹出一个IE窗口来,而不是在内部跳到该链接. 如果 ...

  6. WebBrowser控件判断完全加载中DocumentCompleted和Navigated的关系

    WebBrowser控件判断完全加载使用DocumentCompleted是有问题的,所以有人提出可以使用判断DocumentCompleted的次数和Navigated次数完全相等的方法判断是否完全 ...

  7. 控制 WebBrowser 控件的外观和行为

    控制 WebBrowser 控件的外观和行为 2011-03-23 09:33 在 CSDN 上经常看到以下两个问题: 1.在 MFC 应用程序中,如果创建了一个 WebBrowser 控件(包括 C ...

  8. [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口

    从IE7 开始, IE 支持多页面(Tab)浏览. 而IE 的WebBrowser 控件也相应的多页面浏览开发接口. 出于向下兼容考虑,该接口在缺省情况下是被屏蔽的. 假设你用WebBrowser 控 ...

  9. 使用WebBrowser控件获取网页源码的方法

    使用WebBrowser控件获取网页源码的方法,网上有很多介绍,但绝大多数的人都是使用以下的方法获取: (WebBrowser1.Document as IHtmlDocument2).body.ou ...

  10. webbrowser抓取php网页源码,获取webbrowser控件 网页的源码(收藏)

    获取webbrowser控件 网页的源码(收藏) 翻译|其它|编辑:郝浩|2005-04-28 09:45:00.000|阅读 3152 次 概述: 我在网上找到使用rft控件保存webbrowse文 ...

最新文章

  1. 内存分配器设计的演进
  2. 简介子窗口控件(api)
  3. 大幅涨点!孙剑团队提出新激活层ACON和轻量级网络TFNet
  4. java8 - 新的时间日期API示例
  5. Git show-branch显示提交信息
  6. 搭建discuz论坛
  7. cacti+nagios 整合遇到的问题
  8. 我们分析了成千上万的编程访谈。 这就是我们学到的东西。
  9. 1470A. Strange Birthday Party
  10. 转载-聊一聊深度学习的activation function
  11. QQ在线客服代码 网页qq咨询html代码
  12. android 模拟器 锁屏,如何在模拟器中测试Android锁屏小部件?
  13. CUDA编程之CMAKE
  14. 基于大数据的智能交通管理管控指挥平台技术方案
  15. uniapp项目 App端实现微信登录、QQ登录
  16. C语言:寻找重复数字
  17. gtp怎么安装系统_UEFI+GTP模式下使用GHO文件安装Win8系统的具体操作方法
  18. 学习论文写作课程的心得体会
  19. SpringCloud(三):监控中心 hystrix turbine
  20. 新手Mac需要了解哪些内容?Mac小白基础教程

热门文章

  1. 关于Revit API修改元素参数的问题?
  2. #define和inline 的区别
  3. 如何解决NDK toolchains出现ABI mips64el-linux-android无法编译问题
  4. [JNI] 开发基础(7)结构体
  5. Android全局变量使用
  6. BZOJ5221[Lydsy2017省队十连测] 偏题
  7. 微信小程序跳转微信小程序的实现
  8. mybatis 调用 oracle函数_从Oracle到PG 该做的改造工作一个都不能少!
  9. 51单片机按键输入多位数_单片机实现八路抢答器实例分享
  10. antd vue 的table添加背景颜色_「教程」Spire.PDF教程:如何给PDF添加背景颜色和平铺背景图...