Suite

Obtenir la nouvelle carte lorsque l'événement FocusMapChanged se déclenche

Obtenir la nouvelle carte lorsque l'événement FocusMapChanged se déclenche


Normalement, dans ArcMap, lorsqu'un gestionnaire d'événements pour intercepter l'événement FocusMapChanged est configuré et qu'une nouvelle carte (bloc de données) est activée, lorsque l'événement se déclenche, une référence à FocusMap renvoie la carte qui est activée. MAIS, lorsque la carte actuellement active est supprimée du document, lorsque l'événement se déclenche, une référence à la FocusMap renvoie la carte qui est supprimée ! Quoi?! Ce comportement ne m'aide pas.

Voici le code qui affiche une boîte de message avec le nom de la Focus Map chaque fois que l'événement FocusMapChanged se déclenche…

Importe ESRI.ArcGIS.Carto Importe ESRI.ArcGIS.ArcMapUI Public Class test_FocusMapChanged hérite d'ESRI.ArcGIS.Desktop.AddIns.Button Private m_FocusMapChanged Private activeViewEventsPL As IActiveViewEvents_Event Private Sub activeViewEventsHandler I(ByCaventcustmapHandler) m_FocusMapChanged = Nouveau IActiveViewEvents_FocusMapChangedEventHandler (AddressOf FocusMapChanged) AddHandler activeViewEventsPL.FocusMapChanged, m_FocusMapChanged End Sub Private Sub FocusMapChanged. ) End Sub

Quelqu'un a-t-il une idée de la façon de contourner ce problème et d'obtenir une référence à la carte nouvellement activée plutôt qu'à la carte supprimée?


J'ai donc fini par contacter le support Esri à ce sujet… Cela peut être contourné en connectant l'événement ItemDeleted à PageLayout. Ensuite, l'événement ItemDeleted sera déclenché chaque fois qu'une carte est supprimée.

Cela me donne ce que je veux :

Importe ESRI.ArcGIS.Carto Importe ESRI.ArcGIS.ArcMapUI Public Class test_FocusMapChanged hérite d'ESRI.ArcGIS.Desktop.AddIns.Button Private m_ItemDeleted Private m_FocusMapChanged Private activeViewEventsPL As IActiveViewEvents_Event sous-valeur d'ActiveViewEventsCaP et d'IMF PageLayout, IActiveViewEvents_Event) m_FocusMapChanged = New IActiveViewEvents_FocusMapChangedEventHandler (AddressOf FocusMapChanged) AddHandler activeViewEventsPL.FocusMapChanged, m_FocusMapChanged m_ItemDeleted = New IActiveViewEvents_ItemDeletedEventHandler (AddressOf ItemDeleted) AddHandler activeViewEventsPL.ItemDeleted, m_ItemDeleted End Sub Private Sub FocusMapChanged () theDataFrame = My.ArcMap.Document.FocusMap End Sub Private Sub ItemDeleted(ByVal item As Object) Dim pMapFrame As IMapFrame = item If pMapFrame.Map Is theDataFrame Then MsgBox(My.ArcMap.Document.FocusMap.Name) Else End If End Sub Protected Sub OnClick() ActiveVi ewEventsHandler(My.ArcMap.Document) End Sub End Class

J'ai dû garder une trace de la carte lorsque l'événement FocusMapChanged se produit car si la carte active est supprimée, l'événement FocusMapChanged se déclenche en premier, puis la carte est supprimée ; Ainsi, si la carte active lors du déclenchement de l'événement FocusMapChanged est la même que la carte supprimée dans l'événement ItemDeleted, je souhaite que mon code s'exécute.


Voir la vidéo: la preuve que cest une vrai carte bancaire