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的属性更好用,而且方便,你说呢?
主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架/混合式开发框架Web开发框架Bootstrap开发框架微信门户开发框架的研究及应用
  转载请注明出处:
撰写人:伍华聪  http://www.iqidi.com 
    
原文地址:https://www.cnblogs.com/wuhuacong/p/1211514.html