C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处

简介:
我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1、Data2、Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed Properties中定义我们所需要的信息,需要各种属性的值都可以拿到,那么Data1、Data2、Data3对我们来说,就用处不大,但有的情况下,我们使用它进行一些操作却是非常方便的。
首先我们介绍下,这几个属性是什么东西,Data1、Data2、Data3是Shape的内置属性,不需要额外定义,而且它据说可以放置64K的字符串(没有试过这么大的),一般来说我们是足够放置内容的了。
言归正题,我们什么情况下会使用到这几个属性呢,大家想想,我们在绘图的时候,是不是总有个图框来列出图纸那些设备有几个的一个设备清单呢,或者是一个比例尺说明什么的,这些场合就可以 用上它们了。
因为这些线条,可能是我们随机画上去的,里面的一些设备的说明以及相关信息一般都是根据图纸变化而变化的,因此每次保存的时候,可能要重新绘制一下,但绘制的时候,为了有别于其他设备图元,我们使用这几个属性来记录相关信息。
01.JPG
如我们抹掉已经画上去的内容的时候,可以如下操作
             // 把原有的统计项先抹掉
             if (VisioUtility.HasShapeInWindow(visApp.ActiveWindow))
             {
                visApp.ActiveWindow.SelectAll();
                foreach (Visio.Shape shape in visApp.ActiveWindow.Selection)
                {
                    if (shape.Data1 == "tongji")
                    {
                        shape.Delete();
                    }

                }

                visApp.ActiveWindow.DeselectAll();
            }
如果我们需要添加那些信息的时候,先根据坐标绘制一个形状
Visio.Shape shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX, leftTopY - j * cellHeight, 
                        leftTopX + leftCellWidth, leftTopY - (j +  1) * cellHeight);
然后给这个Shape的属性Data1、Data2、Data3赋值
                     // 第一个单元格用于放统计项名称
                    shape.NameU =  " 某某名称 ";
                    shape.Text =  " 某某名称 ";
                    shape.Data1 =  " tongji "; // 用tongji来标识Data1这个属性只是为了在删除这些框的时候便于查找到

                    
// 放置统计内容
                    shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX + leftCellWidth, leftTopY - j * cellHeight, 
                        leftTopX + leftCellWidth + rightCellWidth, leftTopY - (j +  1) * cellHeight);
                    shape.NameU =  " 某某名称 " +  " v ";
                    shape.Data1 =  " tongji ";

                     // Data2放模具组的名称,用来获取相关单位
                    shape.Data2 =  " 模具组名称 ";
以上是绘制统计图框,绘制完后,我们可能需要更新图框右边的统计值
                 foreach (Visio.Shape shape  in page.Shapes)
                 {
                    if (shape.Data1.Equals("tongji", StringComparison.OrdinalIgnoreCase) &&
                        shape.NameU.Equals(string.Format("{0}v", resultInfo.DeviceType)))
                    {
                        ..
                    }

                }

整个应用就完成了,这里没有用到自定义属性,因为Data1、Data2、Data3的属性更好用,而且方便,你说呢?

本文转自博客园伍华聪的博客,原文链接:C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处,如需转载请自行联系原博主。



目录
相关文章
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发56:双击属性表跳转目标要素并闪烁
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
基于C#的ArcEngine二次开发54:IStatusBar状态栏接口的使用
|
NoSQL 数据处理 C#
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发52:GDB数据处理过程中与Name相关的操作
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
基于C#的ArcEngine二次开发51:获取图层字段唯一值列表(Get Unique Values)
|
算法 C#
基于C#的ArcEngine二次开发50:生成面空洞连接线
基于C#的ArcEngine二次开发50:生成面空洞连接线
基于C#的ArcEngine二次开发50:生成面空洞连接线
|
存储 NoSQL Unix
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
基于C#的ArcEngine二次开发50:MDB创建新要素类及“无当前记录”异常处理
|
C# 开发工具
基于C#的ArcEngine二次开发47:Addins常见问题解决方案集锦
基于C#的ArcEngine二次开发47:Addins常见问题解决方案集锦
基于C#的ArcEngine二次开发47:Addins常见问题解决方案集锦
|
存储 C# Python
基于C#的ArcEngine二次开发46:编辑内容回撤与炸开multipart feature
基于C#的ArcEngine二次开发46:编辑内容回撤与炸开multipart feature
基于C#的ArcEngine二次开发46:编辑内容回撤与炸开multipart feature
|
C# 数据库
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default
基于C#的ArcEngine二次开发45:属性值设置中的DBNull、null和default