winform下利用webBrowser1控件展示地图

winform下利用webBrowser1控件展示地图_第1张图片

1、利用控件加载百度地图

2、再通过数据经纬度在地图上标注坐标点

3、点击坐标点可以打开winform 窗体


前端代码







    
    站点地图
    

    
    
    
    
    


    

后台代码

窗体


//1、必须设置且为true,否则设置webBrowser1.ObjectForScripting对象时会报错
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]
    public partial class frmMianMap : Form
  private void FrmMianMap_Load(object sender, EventArgs e)
        {
            try
            {
               
                //如果遇到脚本错误的话,默认会弹出对话框,这有时候比较烦人,不过可以关闭之
                webBrowser1.ScriptErrorsSuppressed = true;
                //需要注意添加
                webBrowser1.ObjectForScripting = this;
                 //这个文件于可执行文件放在同一目录 
                webBrowser1.Url = new Uri(Path.Combine(Application.StartupPath, "HTMLPage1.htm"));
              }
 /// 
        /// 浏览器控件初始化
        /// 
        /// 
        /// 
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            //这里传入x、y的值,调用JavaScript脚本
            setLocation(dtData);
        }
  /// 
        /// 根据数据设置地图坐标位置
        /// 
        /// 
        public void setLocation(DataTable dt)
        {
            if (dt != null && dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    if (dr["DEV_LONGITUDE"] != null && !string.IsNullOrEmpty(dr["DEV_LONGITUDE"].ToString()) && dr["DEV_LATITUDE"] != null && !string.IsNullOrEmpty(dr["DEV_LATITUDE"].ToString()))
                    {
                        if (alarmbll.ExistsDev(dr["DEV_ID"].ToString()))
                            webBrowser1.Document.InvokeScript("setLocation", new object[] { dr["DEV_LONGITUDE"].ToString(), dr["DEV_LATITUDE"].ToString(), dr["DEV_SITENAME"].ToString(), dr["DEV_IP"].ToString(), dr["DEV_ID"].ToString(), 1, dr["DEV_UNIT"].ToString() });
                        else
                            webBrowser1.Document.InvokeScript("setLocation", new object[] { dr["DEV_LONGITUDE"].ToString(), dr["DEV_LATITUDE"].ToString(), dr["DEV_SITENAME"].ToString(), dr["DEV_IP"].ToString(), dr["DEV_ID"].ToString(), 0, dr["DEV_UNIT"].ToString() });
                    }
                }
            }
        }
   public void webOpen(string ip, string devid)
        {
           //做自己箱多的事情
         }




1、在被调用方法类上加上[ComVisible(true)]标签,意思就是当前类可以com组件的形式供外包调用

2、在webBrowser控件中设置可被html页面调用的类即:webBrowser1.ObjectForScripting = this;前端即可通过window.external访问this对象

3、html页面调用后台方法:window.external.方法名(); 此处的window.external相当于webBrowser1.ObjectForScripting


javascript 代码中window.external的使用


2. 要在javascript代码中,修改Form窗体中的变量,或是调用它的方法,得先把这些变量和方法的定义修改成public的。 
如,在Form中有个方法是public Form.BeginDownloadPage(String[] urls) 
则在javascript代码中,在构造好下载链接后,通过window.external.BeginDownloadPage(String[] urls),就可以把参数传到外部的窗口函数中,交给外部的API来处理。 

3.另外要注意,需要在初始化代码中,加入一个属性设置 
给 webBrowser1设置属性如下: 
webBrowser1.ObjectForScripting = this; 

4. 窗体类前增加以下设置: 
[System.Runtime.InteropServices.ComVisibleAttribute(true)] 

    public partial class Form1 : Form

参考 https://blog.csdn.net/taoerchun/article/details/49782739

你可能感兴趣的:(winform)