日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapInfo开发心得——多地图关联篇【转】

發布時間:2025/1/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MapInfo开发心得——多地图关联篇【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多個窗體(MDI)同時展示,并相互操作這并不困難,小弟在這介紹一下由MapInfo中MapControl組成的多窗體關聯處理。 首先看看效果:

?

以上多關聯地圖窗體實現了:在同一個窗體中加載多個(最多4個)地圖,地圖的拖拽、縮放操作可相互關聯,每個地圖上各個數據都可以完全不相同! 現在我來說一下實現過程: 首先要在同一個窗體中加載多個地圖,我采用了UserControl來做: public partial class ViewMap :System.Windows.Forms.UserControl 在這個ViewMap控件中,我把地圖控件所需要的所有東西(包括加載數據的方法、展示圖元的方法等)都封裝其中。 然后在此控件中聲明幾個事件: 聲明事件
????????/**////?<summary>
????????
///?傳遞子控件事件到父窗體的中間事件
????????
///?</summary>

????????public?event?MouseEventHandler?MapControl_MouseMove;
????????
/**////?<summary>
????????
///?傳遞子控件事件到父窗體的中間事件
????????
///?</summary>

????????public?event?EventHandler?ViewChanged;
????????
/**////?<summary>
????????
///?控件關閉事件
????????
///?</summary>

????????public?event?EventHandler?Closed;
????????
/**////?<summary>
????????
///?在地圖控件上點擊后觸發
????????
///?</summary>

????????public?event?MouseEventHandler?MapControl_MouseClick;
由于在ViewMap中的MapControl是私有的,MapControl的事件并不能被外界所調用,所以在此聲明兩個用于傳遞事件的中間事件,以使各地圖控件相互關聯操作。當然,這些MapControl的事件需要在ViewMap中注冊并調用: 轉發事件
????????void?mapControl1_MapControl_MouseMove?(?object?sender,?MouseEventArgs?e?)
????????
{
????????????
if?(?this.MapControl_MouseMove?!=?null?)
????????????
{
????????????????
//把事件轉發出去
????????????????MapControl_MouseMove?(?this,?e?);
????????????}

????????}

????????
void?mapControl1_MapControl_MouseClick?(?object?sender,?MouseEventArgs?e?)
????????
{
????????????
if?(?this.MapControl_MouseClick?!=?null?)
????????????
{
????????????????MapControl_MouseClick?(?
this,?e?);
????????????}

????????}

在以上代碼中,需要注意到是,我在調用MapControl_MouseMove事件時,把sender的參數轉換為了ViewMap本身,這樣做,是為了將來避免死循環。 那么在需要展示多地圖的窗體上調用一下AddControl,再設置一下控件大小,坐標等,就能方便地把地圖控件加載上去了。 添加子控件
?????????/**////?<summary>
????????
///?為窗體添加子控件
????????
///?</summary>
????????
///?<param?name="childForm">需要添加的子窗體</param>

????????public?void?AddChildForm?(?ViewMap?childForm?)
????????
{
????????????
if?(?!childFormList.Contains?(?childForm?)?)
????????????
{
????????????????
if?(?!(?childFormList.Count?+?1?>?_maxChildForm?)?)
????????????????
{
????????????????????
this.childFormList.Add?(?childForm?);
????????????????}

????????????????
else
????????????????
{
????????????????????MessageBox.Show?(?_OVER_MAX_CHILDFORM_COUNT?);
????????????????????
return;
????????????????}

????????????}

????????????childForm.MapControl_MouseMove?
+=?new?MouseEventHandler?(?vm_MapControl_MouseMove?);
????????????childForm.ViewChanged?
+=?new?EventHandler?(?vm_ViewChanged?);
????????????childForm.Closed?
+=?new?EventHandler?(?childForm_Closed?);
????????????childForm.MapControl_MouseClick?
+=?new?MouseEventHandler?(?childForm_MapControl_MouseClick?);
????????????SetChildFormLocation?();
????????????
this.Controls.Add?(?childForm?);
????????}

在以上代碼中注冊的事件,以下是執行方法節選: 執行方法節選
?????????void?vm_MapControl_MouseMove?(?object?sender,?MouseEventArgs?e?)
????????
{
????????????
foreach?(?ViewMap?vm?in?childFormList?)
????????????
{
????????????????
if?(?!sender.Equals?(?vm?)?)
????????????????
{
????????????????????vm.DrawAssistLine?(?e.Location?);
????????????????}

????????????}

????????}


????????
void?vm_ViewChanged?(?object?sender,?EventArgs?e?)
????????
{
????????????
//遍歷所有子窗體,如當前sender不為本身,執行事件
????????????MapControlEventArg?mce?=?e?as?MapControlEventArg;
????????????
foreach?(?ViewMap?vm?in?childFormList?)
????????????
{
????????????????
if?(?!sender.Equals?(?vm?)?)
????????????????
{
????????????????????vm.SetCenter?(?mce.ZoomLevel,?mce.Center?);
????????????????}

????????????}

????????}

在這里,就可以看出來使用ViewMap本身替代sender的優點了,在這里循環判斷一下子控件列表,如果不為控件本身,便執行相應方法……

總結

以上是生活随笔為你收集整理的MapInfo开发心得——多地图关联篇【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。