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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

?

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

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

????????public?event?EventHandler?ViewChanged;
????????
/**////?<summary>
????????
///?控件關(guān)閉事件
????????
///?</summary>

????????public?event?EventHandler?Closed;
????????
/**////?<summary>
????????
///?在地圖控件上點(diǎn)擊后觸發(fā)
????????
///?</summary>

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

????????}

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

????????}

在以上代碼中,需要注意到是,我在調(diào)用MapControl_MouseMove事件時(shí),把sender的參數(shù)轉(zhuǎn)換為了ViewMap本身,這樣做,是為了將來(lái)避免死循環(huán)。 那么在需要展示多地圖的窗體上調(diào)用一下AddControl,再設(shè)置一下控件大小,坐標(biāo)等,就能方便地把地圖控件加載上去了。 添加子控件
?????????/**////?<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?);
????????}

在以上代碼中注冊(cè)的事件,以下是執(zhí)行方法節(jié)選: 執(zhí)行方法節(jié)選
?????????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?)
????????
{
????????????
//遍歷所有子窗體,如當(dāng)前sender不為本身,執(zhí)行事件
????????????MapControlEventArg?mce?=?e?as?MapControlEventArg;
????????????
foreach?(?ViewMap?vm?in?childFormList?)
????????????
{
????????????????
if?(?!sender.Equals?(?vm?)?)
????????????????
{
????????????????????vm.SetCenter?(?mce.ZoomLevel,?mce.Center?);
????????????????}

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

????????}

在這里,就可以看出來(lái)使用ViewMap本身替代sender的優(yōu)點(diǎn)了,在這里循環(huán)判斷一下子控件列表,如果不為控件本身,便執(zhí)行相應(yīng)方法……

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。