2014-09-28 4 views
1

У меня есть несколько маркеров на карте. Событие кликов работает только для одного маркера, возможно, последний маркер, «загруженный» на карте. Он вызывает метод C#, и он работает, но только на последнем маркере. Другие маркеры не вызывают события и не вызывают метод. Я задавался вопросом, может ли кто-нибудь помочь? Ниже приведен код для страницы html (на самом деле PHP), а затем код C#. Я думаю, мне нужно изменить код Goolge Maps, но попробовал много вещей без везения.Click Event Works Only For Last Marker

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 

    <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> 
    <script src="http://google-maps-utility-library-v3.googlecode.com/svn/tags/markerwithlabel/1.1.9/src/markerwithlabel.js" type="text/javascript"></script> 

    <style type="text/css"> 
    html, body { padding: 0; margin: 0 } 
    .labels { 
     color: red; 
     background-color: white; 
     font-family: "Verdana", "Arial", sans-serif; 
     font-size: 10px; 
     font-weight: bold; 
     text-align: center; 
     width: 50px;  
     border: 1px solid black; 
     white-space: nowrap; 
    } 
    </style> 

</head> 
<body> 
    <?php 
     $con=mysqli_connect("localhost","root","","realestate_db"); 
     if (mysqli_connect_errno()) {echo "Failed to connect to MySQL: " . mysqli_connect_error();} 
     $result = mysqli_query($con,"SELECT `ID`, `lat` , `long` FROM `house` "); 
    ?> 

    <div id="map" style="width: 500px; height: 400px;"></div> 

    <script type="text/javascript"> 
     var pt; 
     var map = new google.maps.Map(document.getElementById('map'), { 
      mapTypeId: google.maps.MapTypeId.ROADMAP }); 
     var markerBounds = new google.maps.LatLngBounds(); 

     <?php while($row = mysqli_fetch_array($result)) { ?> 
       pt = new google.maps.LatLng(<?php echo $row['lat'] . "," . $row['long']; ?>); 
       marker = new MarkerWithLabel({ 
        position: pt, 
        map: map, 
        title: 'House', 
        labelContent: "House " + <?php echo $row['ID'] ?> , 
        labelAnchor: new google.maps.Point(-10, 50), 
        labelClass: "labels", 
        labelStyle: {opacity: 0.75} 
       }); 
       markerBounds.extend(pt); 
     <?php } 

       mysqli_close($con); 

     ?> 

     map.fitBounds(markerBounds); 

     google.maps.event.addListener(marker, "click", function (e) { 
     window.external.GetApplicationName(); }); 



    </script> 
</body> 
</html> 

С #:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace houseDB1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      webBrowser1.ObjectForScripting = new ExternalApplication(); 
     } 

     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      webBrowser1.Navigate("127.0.0.1/box3.php"); 
     } 

     private void webBrowser1_DocumentCompleted_1(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 

     } 

     [ComVisible(true)] 
     public class ExternalApplication 
     { 
      public void GetApplicationName() 
      { 
       MessageBox.Show("ZZTOP"); 
       //return "The application"; 
      } 
     } 



    } 


} 

Спасибо.

ответ

0

Я подозреваю, что это потому, что вы только добавили click прослушиватель до последнего MarkerWithLabel объект, на который ссылается переменная.

Попробуйте переместить следующий фрагмент кода внутри while блока, так что слушатель добавил для каждого MarkerWithLabel экземпляра, созданного в каждой итерации:

google.maps.event.addListener(marker, "click", function (e) { 
     window.external.GetApplicationName(); }); 
+0

Да, это сработало. Теперь я понимаю, что вижу. Я даже могу передать параметры/данные обратно на C#. Там есть несколько приятных «внутренних книг», связанных с этими событиями и вызовами функций. Спасибо! – user1325143