我们在使用EC给Mstn中的图形元素添加自定义属性时,有时会因为属性过多,让用户无法从属性名字中完全理解当前属性的含义或者用途。这篇文章给大家介绍一种方法,给我们的EC属性增加一些说明,用户在操作我们添加的EC属性时,能够方便的查看这些说明。如下是我们的测试代码:
communities.bentley.com/.../ECPropToolTip.7z
编译后在Mstn中加载我们的程序,选中任一图形元素后执行keyin命令“ecproptooltip test”。打开元素属性对话框,可以看到程序给刚刚选中的元素添加了如下图所示的EC属性,在属性值处单击光标左键,将输入焦点设置到输入域内,此时将光标悬停在属性值上,片刻后就会弹出下图红圈中的提示。随意移动一下我们的光标就可以看到提示会自动消失。
接下来我们看一下代码中是如何实现的。我们在插件的入口Run函数中执行了两个函数,如下代码所示:
protected override int Run(string[] commandLine) { KeyinCommands.CheckECSchema(); KeyinCommands.AddExtendedType(); return 0; }
KeyinCommands.CheckECSchema()函数在当前dgn文件中创建了我们用来添加EC属性的ECSchema定义,CheckECSchema执行完以后会调用KeyinCommands.AddExtendedType函数,AddExtendedType函数的定义如下所示:
public static bool AddExtendedType() { IECSchema ecschema = GetECSchema(); if (null == ecschema) return false; IECClass ecclass = ecschema.GetClass(NameECClass); IECProperty ecprop = ecclass.FindProperty(NameProp); IECInstance customExtendedType = ECPropertyPane.CreateExtendedType("CustomType"); ECPropertyPane.SetExtendedTypePropertyValueUIHandler(customExtendedType, new System.Drawing.Design.PropertyValueUIHandler(MyPropertyValueUIHandler)); ECPropertyPane.SetExtendedType(ecprop, customExtendedType); return true; }
函数中通过ECPropertyPane.SetExtendedType函数给我们的ecprop设置了扩展类型customExtendedType,我们通过ECPropertyPane.SetExtendedTypePropertyValueUIHandler 函数将customExtendedType跟静态函数MyPropertyValueUIHandler关联了起来。这样处理以后,我们EC属性在发生各种事件时,都会触发我们的MyPropertyValueUIHandler函数。在这个函数中我们通过参数“ITypeDescriptorContext context”获取到了我们的属性值所在的控件,然后给这个控件设置了一个ToolTip。这样设置以后在光标悬停在属性值所在的控件时就会临时弹出我们设置好的提示内容,用户通过我们弹出的提示内容就能更进一步的了解属性的含义了。