我们知道,Visio的Shape对象有有3个比较特别的属性,分别是Data1、Data2、Data3,平常我们很少用到它,因为我们如果需要属性的话,可能会通过ShapeSheet的Customed Properties中定义我们所需要的信息,需要各种属性的值都可以拿到,那么Data1、Data2、Data3对我们来说,就用处不大,但有的情况下,我们使用它进行一些操作却是非常方便的。
首先我们介绍下,这几个属性是什么东西,Data1、Data2、Data3是Shape的内置属性,不需要额外定义,而且它据说可以放置64K的字符串(没有试过这么大的),一般来说我们是足够放置内容的了。
言归正题,我们什么情况下会使用到这几个属性呢,大家想想,我们在绘图的时候,是不是总有个图框来列出图纸那些设备有几个的一个设备清单呢,或者是一个比例尺说明什么的,这些场合就可以 用上它们了。
因为这些线条,可能是我们随机画上去的,里面的一些设备的说明以及相关信息一般都是根据图纸变化而变化的,因此每次保存的时候,可能要重新绘制一下,但绘制的时候,为了有别于其他设备图元,我们使用这几个属性来记录相关信息。
如我们抹掉已经画上去的内容的时候,可以如下操作
首先我们介绍下,这几个属性是什么东西,Data1、Data2、Data3是Shape的内置属性,不需要额外定义,而且它据说可以放置64K的字符串(没有试过这么大的),一般来说我们是足够放置内容的了。
言归正题,我们什么情况下会使用到这几个属性呢,大家想想,我们在绘图的时候,是不是总有个图框来列出图纸那些设备有几个的一个设备清单呢,或者是一个比例尺说明什么的,这些场合就可以 用上它们了。
因为这些线条,可能是我们随机画上去的,里面的一些设备的说明以及相关信息一般都是根据图纸变化而变化的,因此每次保存的时候,可能要重新绘制一下,但绘制的时候,为了有别于其他设备图元,我们使用这几个属性来记录相关信息。
如我们抹掉已经画上去的内容的时候,可以如下操作
//
把原有的统计项先抹掉
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();
}
如果我们需要添加那些信息的时候,先根据坐标绘制一个形状
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赋值
leftTopX + leftCellWidth, leftTopY - (j + 1) * cellHeight);
//
第一个单元格用于放统计项名称
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 = " 模具组名称 ";
以上是绘制统计图框,绘制完后,我们可能需要更新图框右边的统计值
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)))
{
..
}
}
{
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的用处,如需转载请自行联系原博主。