响应事件
不管你的流程图是用纯代码绘制的,还是用可视化工具绘制的,其实最终都是通过代码生成的。
在生成流程图的时候,我们通常会将形状(包括线条和文字)的tag属性设置为该形状对应的数据行:
mark.Tag = dr
'将tag设置为对应的数据行,用于响应事件
例如我们单击流程图中的某个形状,就需要在MouseClick事件中获得所单击的形状,然后通过形状的Tag属性获得对应的数据行,得到了数据行,就可以根据数据行的内容执行相应的操作。
Map控件中所有的形状(包括线条和文字)都可以响应鼠标事件,可响应的鼠标事件有MouseClick、DoubleClick、MouseMove、MouseDown、MouseUp。
在Map控件的鼠标事件中,用HitTest方法获得鼠标位置的形状,然后通过其tag属性获得对应的数据行,基本代码为:
Dim
map
As
GeoMap = e.Form.Controls("Map1").GeoMap
Dim
ifo
As
HitTestInfo = map.HitTest(e.Sender.MousePosition)
'MousePosition为新增加的通用属性,用于返回鼠标位置
If
ifo
IsNot
Nothing
AndAlso
ifo.Vector
IsNot
Nothing
Then
'如果是形状
If
ifo.Vector.tag
IsNot
Nothing
AndAlso
TypeOf
ifo.Vector.tag
Is
DataRow
Then
'且tag属性为数据行
Dim
dr
As
DataRow = ifo.Vector.Tag
'获得数据行
'执行后续操作
End
If
End
If
可随意扩展
我们以项目文件的形式提供了两个可视化的流程图设计工具,而不是以内置功能的形式洗提供,就是为了方便大家扩展。
你可以给两个可视化绘制工具的数据表添加一些列,然后新建一个窗口,用于输入这些列的内容,最后修改流程图设计窗口的Map控件的DoubleClik事件代码,让用户双击某形状,可以定位到形状对应的数据
行,然后打开窗口输入这些列的内容。
或者给流程图设计窗口增加一个按钮,专门用于打开你的窗口。
完成了上述工作后,再修改流程图显示窗口的绘制代码,你可以根据新增列的内容改变形状的属性,例如边框颜色、字体颜色、背景颜色、文字内容、线条宽度等等;你还可以设置Map控件的鼠标事件代码,在用户单击、双击或经过某个形状时,获取对应的数据行,然后执行特定的操作。