c#继承Mapx的问题

fontain 2008-12-22 05:50:03
在C#中我继承了 AxMapXLib.AxMap,添加了几个简单的方法后,原来能使用的好好的选择功能(直接调用 axMap.CurrentTool=MapXLib.ToolConstants.miRadiusSelectTool之类)忽然不能选择了,请问为什么?
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace MapEditor
{
class MapXEx : AxMapXLib.AxMap
{
private double m_ZoomScale = 2.0;
private float m_MoveScale = 100.0F;
public double ZoomScale
{
get { return m_ZoomScale; }
set { m_ZoomScale = value; }
}
public float MoveScale
{
get { return m_MoveScale; }
set { m_MoveScale = value; }
}
public MapXEx()
{
this.KeyUpEvent += new AxMapXLib.CMapXEvents_KeyUpEventHandler(onKeyUp);
}
public override bool PreProcessMessage(ref Message msg)
{
if ((Keys)msg.WParam ==Keys.Delete) return true;//屏蔽delete键

return base.PreProcessMessage(ref msg);
}
public void onKeyUp(object sender, AxMapXLib.CMapXEvents_KeyUpEvent e)
{

switch ((Keys)e.keyCode)
{
case Keys.Add://zoom in,'+'
case Keys.Oemplus:
this.Zoom /= m_ZoomScale;
break;
case Keys.Subtract://zoom out,'-'
case Keys.OemMinus:
this.Zoom *= m_ZoomScale;
break;
case Keys.Left:
this.Pan(-m_MoveScale, 0);
break;
case Keys.Up:
this.Pan(0, m_MoveScale);
break;
case Keys.Right:
this.Pan(m_MoveScale, 0);
break;
case Keys.Down:
this.Pan(0, -m_MoveScale);
break;
default:
//MessageBox.Show(e.keyCode.ToString());
break;

}
}
}

}
...全文
430 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
fontain 2009-01-08
  • 打赏
  • 举报
回复
结了
simonezhlx 2008-12-24
  • 打赏
  • 举报
回复
如果长期做GIS开发,建议少用MAPINFO 的ACTIVEX,如果需要客户端展示,可以参考在服务端调用MAPXTREME的相关方法来做逻辑处理,如:处理放大,缩小,计算等,而将效果传回客户端,自己开发一个客户端展示插件,只需要GDI+,再调用服务的相关方法即可实现,而且相关灵活.
simonezhlx 2008-12-24
  • 打赏
  • 举报
回复
顶到GIS版中去
fontain 2008-12-23
  • 打赏
  • 举报
回复
是ActiveX控件,比较著名的地理信息构件
是原来不继承的时候可以用,现在继承了一下就不能用了
如果不想使用对象组合,能不能办到呢
因为如果是继承,绝大多数代码都不用做大的修改,对象组合涉及的修改面太大了
按道理继承应该也不会发生这样的变化
cuike519 2008-12-23
  • 打赏
  • 举报
回复
你这个是个ActiveX控件吧?查看一下引用的时候生成的代理dll?

你的意思是你这中方式以前可以用现在不能用了?还是原来不继承的时候可以用,现在你继承了一下就不能用了?

如果是后者你是否考虑用对象的组合而不是类的继承。。。
cheng_er 2008-12-23
  • 打赏
  • 举报
回复
支持
fontain 2008-12-23
  • 打赏
  • 举报
回复
请看完贴再回复,我在4楼已经重新做了解释
zhu4139365 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gisfarmer 的回复:]
没有遇到过类似情况。

忽然不能选择了
-----------
具体指什么?
[/Quote]
leonwan 2008-12-23
  • 打赏
  • 举报
回复
支持
fontain 2008-12-23
  • 打赏
  • 举报
回复
axMap.CurrentTool=MapXLib.ToolConstants.miRadiusSelectTool等是MapX默认的选择工具,它们的选择方法内置于MapX之中,由于我是直接继承MapX,按道理这部分不必改动,功能应该不变,但当我将原来的MapX实例改为由我的MapxEx定义之后,原来能执行的选择功能(圈选后以选择态显示)不能执行了(圈选后无变化,貌似没选择),百思不得其解
cuike519 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fontain 的回复:]
是ActiveX控件,比较著名的地理信息构件
是原来不继承的时候可以用,现在继承了一下就不能用了
如果不想使用对象组合,能不能办到呢
因为如果是继承,绝大多数代码都不用做大的修改,对象组合涉及的修改面太大了
按道理继承应该也不会发生这样的变化
[/Quote]

我让你看他生成的代理dll的意思你没搞明白。。。。

你引用这个ActiveX,.NET会为你生成一个interop.XXX.dll,这个dll里面只有接口,是没有实现的。。。

恐怕你只能使用组合。。。

public bool PreProcessMessage(ref Message msg) { 
if ((Keys)msg.WParam ==Keys.Delete) return true;//屏蔽delete键
return m_Mapx.PreProcessMessage(ref msg);
}
fontain 2008-12-23
  • 打赏
  • 举报
回复
我用的mapx5.0,写了一些代码了,暂时不想换mapxtreme,并且有点困难就换平台也不太好,先看看这个问题能不能解决吧
laidon 2008-12-23
  • 打赏
  • 举报
回复
楼主用的MapX是哪个版本的?好像5.0以前的存在BUG
可以考虑使用MapXtreme
空心兜兜 2008-12-23
  • 打赏
  • 举报
回复
UP
rl0516 2008-12-23
  • 打赏
  • 举报
回复
建议在.NET下选择MapXtreme
killer_liqiao 2008-12-23
  • 打赏
  • 举报
回复
up
fontain 2008-12-23
  • 打赏
  • 举报
回复
和我加的方法应该无关,因为这两个方法仅相关于键盘操作,还有,这个现象仅仅是空继承的时候就已经出现了
evachenchen 2008-12-23
  • 打赏
  • 举报
回复
急聘.net项目经理,有意向者请与我联系.QQ:157523111 或将简历发chenchen@rondi.com.cn
工作地点:深圳福田 薪资范围: 8000-11000 元/月

岗位要求:
1、两年以上一线程序开发经验,一年以上架构设计经验,有电信、通讯相关从业背景;
2、熟悉电信或软件产品整体实现过程,包括从需求分析到产品发布;
3、精通.net开发工具及语言,熟悉至少一种关系数据库,熟练使用SQL语句;
4、熟悉C++、Java等相关语言者优先考虑。
岗位描述:
1、负责软件系统的设计与开发,包括参与用户需求的分析,制定产品发展计划;
2、负责管理来自用户和公司内部的业务需求,完成需求分析,并最终形成产品设计;
3、完成产品研发的需求分析,利用专业工具进行方案设计和原型的设计;
4、负责产品核心架构的设计和核心代码的编写,以及数据库设计和接口设计;
5、参与项目管理,跟踪和保障产品的开发进度,及时解决出现的问题。
  • 打赏
  • 举报
回复
你去掉你加的方法就可以选择了吗?
是不是静态类或密封类?
devilli 2008-12-23
  • 打赏
  • 举报
回复
帮顶
加载更多回复(5)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧