Visio的DrawingControl暴露出来很多事件,一般来说是够用了。可是有时候,我们还觉得这些事件不够用,比如说:
我们想在拖动某个形状时触发事件来处理,可是直接从drawingcontrol里面是没有这样的事件的,查了查也没有这样的事件。
于是,我可以这样做。
Visio.Shape shape = this.axDrawingControl1.Window.Application.ActivePage.Shapes[1];
shape.TextChanged +=new Microsoft.Office.Interop.Visio.EShape_TextChangedEventHandler(shape_TextChanged);
shape.CellChanged +=new Microsoft.Office.Interop.Visio.EShape_CellChangedEventHandler(shape_CellChanged);
当然真正应用的时候,这个shape不能像我上面那样取,这里注册了两个事件,一个是该Shape的文本发生改变的事件,一个是Cell改变的事件,在事件处理中
private void shape_CellChanged(Microsoft.Office.Interop.Visio.Cell Cell)
{
if(Cell.Name == "PinX" || Cell.Name == "PinY")
MessageBox.Show("LocationChanged");
}
这样,该Shape位置发生变化我们就可控了。
posted on 2004-10-18 15:31 什么都不知道 阅读(805) 评论(13) 编辑 收藏
浙公网安备 33010602011771号
评论
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-05 14:31 zhaoxpi
请教一个问题。急,谢谢!
我用c#+visio2003开发了一个机房管理软件,但是在客户机安装完成后(程序用到的visio drawing control控件已经打包进去了),需要visio的部分运行不了,发现只有在机器上安装了一整套visio软件后才可以运行我自己的软件。请问为什么?难道客户机上必须安装整套visio吗?
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-05 19:26 什么都不知道
是的,必须安装
我在该系列中的第一篇(?)中说过这个问题。必须安装visio2003才可以,而且必须安装.net可编程支持组件(typical安装不装)
这个安装可以用脚本写出silent installation的,所以你可以放在一个安装包内,具体你可以看我从前的文章
# 好,谢谢 2005-01-06 09:37 zhaoxpi
好,谢谢
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 11:47 afirst
小弟正在研究c#开发visio2003的问题,可否给一些思路呢?
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 11:48 afirst
或者相关的文档,我在网上查找,实在太少了。
去电脑书店,很少有卖的。如果可以我告诉你信箱,谢谢了
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 18:42 什么都不知道
visio 2003能实现的(比如绘图) + visio 2003不能实现的(比如和你的业务数据库打交道),而且你不想个性化visio 2003,是想单独开发个程序,就是用这个drawing control的目的
相关的文档包括msdn都很少,我这个系列应该算是最全的了,只是我没有多少时间把他写的很详细
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-06 23:34 zhaoxpi
继续请教!谢谢!
我不想让用户使用visio自己提供的右键菜单,所以我自己创建了contextmenu,但是现在的问题是没办法扑捉到点击右键时的鼠标位置,因为drawing control内部的鼠标坐标没办法转换到winform的坐标。
请问有什么办法解决吗?
# re: 使用Visio 2003 Drawing Control开发应用(补1) 2005-01-07 18:16 什么都不知道
{
try
{
double vLeft, vTop, vWidth, vHeight;
axDrawingControl.Window.GetViewRect( out vLeft, out vTop, out vWidth, out vHeight);
// calculate position
int xForm = (int) (axDrawingControl.Left + (axDrawingControl.Width/vWidth)*(x-vLeft));
int yForm = (int) (axDrawingControl.Top + (axDrawingControl.Height/vHeight)*(vTop-y));
}
catch(Exception ex)
{
return new Point(0, 0);
}
}