ThinkGeo.com    |     Documentation    |     Premium Support

Add Map click event manually

Hello,


 i have list of image button which operates on Map now one of those button needs Map_Click event.


So when this Imagebutton gets clicked i wrote this code 


 



protected void btnPlotPointer_Click(object sender, ImageClickEventArgs e)
    {
        //Set the default feature of mouse pointer
        mainMap.Click += new EventHandler<MapClickedEventArgs>(mainMap_Click);
    }


 But the Map click events not firing this way, i have try to check its functionality by putting the line in OnInit and Onload event of the page but nothing works.


If i assign the click event in aspx page everything works fine.


Am i missing anything here?


 


Thanks,


Badal


 



Badal, 
  
 I guess that you have some misunderstanding about the Postback mechanism of ASP.NET. After you have registered one click event for Map control, and when you click on the map, it will trigger postback and the Map Control will be re-created, and that means the events on Map Control will be reset. 
  
 So you need to register events on the Page_Load function or OnLoad event or on the aspx page directly. 
  
 Thanks, 
  
 Khalil

Hi,


I had similar issue. Donot add onclick event manually in code behid. Open the markup in design mode, right click on map and click on properties. This opens properties window for map, click on events tab and double click on a box next to click event. This will create a function that handles map click event.


Sincerely,


Prava



Prava, 
  
 Thanks for your information about how to add event handler on the Deign Time. 
  
 I guess that Badal’s problems is caused that he just added the event handler at the Run Time. Anyway, thank you very much. 
  
 Thanks, 
  
 Khalil

Hello Prava, 
  
 Thanks for your inputs here, but i have already tried that and its working nice but problem is that the click event occurs every time when the map clicks which is time consuming. I want the map click event to only activate when one button clicks. 
 Scenario is something like this, above the map i have 10-15 image buttons which consist of zoomin, zoomout, panning, measure distance etc. 
 Now out of this 15 buttons, only "measure distance" button requires Map click event. 
 So i want to enable mouse click event only when this button gets pressed

On Button1 click event store some value in session and check for that value on map click, if condition is met execute the code on map click else do nothing, and with the click of Button2/Button3...........ButtonN reset Button1IsClicked to false.


bool Burtton1IsClicked = false;


Button1_click(object sender, EventArgs e)


{


Session["Button1IsClicked"] = true;


}


 protected void Map1_Click(object sender, MapClickedEventArgs e)


{


      bool executeCode =  (bool) Session["Button1IsClicked"];


       if(executeCode)


         {


              ........................


             .......................


                ....... Your code goes here....


         }


}


 


 


protected void  Button2_click(object sender, EventArgs e)


{


         Session["Button1IsClicked"] = false;


        ...........rest of your code handelling Button2 click event


}


 


I hope this works.


Sincerely,


Prava



Hello, 
  
 Thanks for your code here… 
 But my problem is that in the page where map resides there are 3 DevExpress grid component. 
 And structure of those grid is they have to be bind at every subsequent page loads means everytime the page is posted back and forth (devexpress requires this, so i cant change this). 
 So binding this 3 grid takes out the time. So i was looking to completely disable the mouse click event for other button which will remove the page postback and hence can save time… 
  
 Thanks

Badal, 
  
 First off, for Prava, thank you for your suggestions and attention on this post,  
 I think your method is a good idea. But what badal wanted was to disable the mouse click postback event for those image buttons that didn’t have postback event except the measure distance image button. So you can use the session or viewstate to store the state which indicate whether we need the mouse click postback event. 
  
 So I suggest using hidden filed instead of session to store the state that is a good idea to implement your requirements. So you can change the hidden filed value on the client-side using Javascript or on the server-side to represent different states. 
  
 If you still have any problems please let me know. I look forward to your feedback. 
  
 Khalil

Hello, 
  
 Nice to get your thoughts here… 
 I need to enable the click event only on “Measure Distace” button and for all other button the click should not postback the page, i.e. click should be disabled 
  
 Ex. Like such scenario for button we can write “onClintClick” and write “return false” to stop executing the button’s click event 
  
 And in our map if i wrote “onClientClick” event then map is not showing at all…Is there anyway in Javascript in which i can stop executing the click event?

Badal, 



It seems that we have some misunderstanding on this problem. Maybe I need to confirm with your requirements again. 

You have about 15 images buttons and only one button named "Measure Distance" image button need to postback and also it needs to register the Map server click event. At the same time, other image buttons don't need to trigger postback any more. Is that right? 



If so, one solution is just like the way you have mentioned, and add "OnClientClick" client event for these asp.net server image button control that you don't want it to postback. Write it like the code in the attached screenshot. Also you can refer to the ""DrawEditShapes" sample in our installed samples which you can find its source codes at "Samples\MapShapes\DrawEditShapes.aspx". 



Another solution is that using html image button of pure client-side instead of asp.net server image button, as you know, all the asp.net server controls will be rendered as html tag eventually. If you won't interaction with server-side and I suggest you choose this one. Write it like the code in the attached screenshot.



Thanks, 



Khalil



Hi Khalil,


I will try to explain in simple terms what i need. That's right that I have total 15 buttons and all do have their button_click events and so that page postback event is fired. But out of them one is "Measure Distance" button which also do button_click event. After this button click, when I click on Map for measuring the distance between two points for that Map's click event is fired (map_Click).  For other buttons, when I click on the map, Map's click event would not be fired. So in short, Map's click event works when I click on the map and "Measure Distance" button clicked. Map's click event does not work when I click on the map and other than "Measure Distance" button click. But noted that button's click event is fire but map's click event not fire utill and unless click on "Measure Distancce" click.


I hope, now you will get my point and give proper solution for that.


Thanks,


Badal



Hi, Badal



I had known what you want, and we were always walk the same path to solve this problem. Maybe I need one sample to demonstrate what I mean. Please see full detail in the attached sample code. I use two image buttons one won't trigger postback event in order to save time and another named "MeasureDistance" will trigger postback event and register the mouse click event for Map control, but if user click other buttons not this one, the click event of map will be removed automatically.



Khalil 

 



ThinkGeoSample.zip (2.32 KB)

This example demonstrates the use of event listeners. It. listens for the click event on a marker to zoom clicker counter the map when the marker is clicked . To add a click event to markers stored in an array, you will first need to iterate over the array of markers using a loop. One approach that I have tried (and which works) is to identify the object in the leaflet layer and to trigger a click event using layer[id].

Hey @Noradavis,

This thread is 13 years old. Did you have a question on how to do click events in ThinkGeo MapSuite? If so, could you create a new thread with details of your question and how to recreate the issue?

Thanks,
Kyle