在一个
Windows
应用程序中,右键的弹出菜单是非常有效和有用的操作方式,在
.NET
中许多控件都有右键菜单的属性项(
ContextMenu
),只要你创建一个
ContextMenu
对象然后把它赋给你需要设置弹出菜单的控件就可以了,但是在
Mapobjects
的地图控件中并不提供右键菜单属性。我们是不是就没办法给其甚至一个右键菜单?当然可以,我们可以通过其他控件来辅助实现。
具体思路如下:我们可以借助容器控件(
Panel
)让他浮动在
Mapobjects
地图控件之上,设定它的大小为(
0,0
)主要是让它对用户来说不可视,然后我们创建一个弹出菜单(
ContextMenu
)加上一些常用的菜单项如放大、缩小、漫游等。把这个弹出菜单赋给容器控件(
Panel
)的
ContextMenu
属性。最后在
Mapobjects
的鼠标按下事件中把容器控件重新定位到鼠标当前的位置,并使弹出菜单弹出即可。
1、
首先创建一个
Windows
应用程序项目
MO RightMenu Example

图一
新建
Windows
应用程序
2、
在窗体中添加控件,我们用到的主要是
Mapobjects
地图控件
axMap1
Panel容器
panel1
ContextMenu菜单
contextMenu1
布局如下:

图二在应用程序窗体中添加控件
3、
添加事件编写代码,为
Mapobjects
地图控件添加
MouseDownEvent事件的处理,并在事件中写入如下代码。

图三为地图控件添加
MouseDownEvent事件的处理
private
void axMap1_MouseDownEvent(
object sender, ESRI.MapObjects2.Core.MouseDownEventArgs e)
{
//判断是否为鼠标右键
if
(e.button == 2)
{
//从新定位控件 Panel的位置 即鼠标在MO控件中的坐标加上 地图控件的起始坐标Location
this.panel1.Location =
new Point(
this.axMap1.Location.X + e.x,
this.axMap1.Location.Y + e.y);
//弹出右键菜单
this.contextMenu1.Show(
this.panel1,
new Point(0,0));
}
}
到此基本上完成了
Mapobjects
地图控件右键菜单的添加,具体添加什么内容和要处理什么方面的事情大家可以根据自己的需要来定制。此处以
C#.NET
开发环境为例,运行效果如下:

图四
程序运行效果
附:示例代码下载