2017-02-14 28 views
0

GMap.NETマーカーをC#で更新する必要があります。 私は以下のように私のマーカーを追加しました:C#でGMap.NETマーカーを更新する

GMap.NET.WindowsForms.GMapMarker marker2 = 
       new GMap.NET.WindowsForms.Markers.GMarkerGoogle(
        new GMap.NET.PointLatLng(39.81750, 30.52686), 
        new Bitmap("hello.png")); 
      marker2.ToolTipText = "Hello"; 
      marker2.ToolTip.Fill = Brushes.Black; 
      marker2.ToolTip.Foreground = Brushes.White; 
      marker2.ToolTip.Stroke = Pens.Black; 
      markers.Markers.Add(marker2); 
      gMapControl1.Overlays.Add(markers); 

私はタイマーでこのマーカーの位置を更新します。 この変数をタイマースレッドでどのように変更できますか? これらのマーカーをグローバル変数にする必要はありますか? 回答ありがとうございます。

答えて

0

あなたはタイマーにオーバーレイを渡す必要があります:あなたは、単にマーカーを更新することができ、それはあなたがgmapcontrolにそれを追加したと仮定すると(地図上に更新する必要がありますので、

System.Timers.Timer t = new System.Timers.Timer(); 
GMapOverlay overlay_ = new GMapOverlay(); 
//do stuff to your overlay 
t.Elapsed += (sender, e) => MyElapsedMethod(sender, e, overlay_); 

あなたのオーバーレイは、すべての参照されています):

static void MyElapsedMethod(object sender, System.Timers.ElapsedEventArgs e, GMapOverlay overlay) 
{ 
    overlay.Markers[..].Position = new PointLatLng(0,0); //for your new position 
} 

私はこのコードをテストしていませんが、私はバックグラウンドワーカーを使って同様のことを成功させています。

+0

OK。そして、上記のコードと同じコンテキストでマーカー変数を変更するにはどうすればよいですか? –

+0

私はマーカーとして変数を呼び出して変更できるようにしたいと考えています。私は上記のように宣言していますが、変数としてそれらに到達することはできません。私はC#でほとんど知識がありません。私の質問には申し訳ありません。 –

+0

マーカーの 'List'に値を設定する必要があります。' Tag'プロパティを使ってそれらを区別し、一意の任意のIDを渡すことができます。次に、そのIDのマーカーリストをフィルタリングし、位置を更新します。 IMOでは、リストやオーバーレイをタイマーに渡す必要はなく、フィールドに保持するだけです。 – rdoubleui

関連する問題