我們知道,Visio的Shape對象有有3個比較特別的屬性,分別是Data1、Data2、Data3,平常我們很少用到它,因為我們如果需要屬性的話,可能會通過ShapeSheet的Customed Properties中定義我們所需要的信息,需要各種屬性的值都可以拿到,那麼Data1、Data2、Data3對我們來說,就用處不大,但有的情況下,我們使用它進行一些操作卻是非常方便的。
首先我們介紹下,這幾個屬性是什麼東西,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(); }
如果我們需要添加那些信息的時候,先根據坐標繪制一個形狀
Visio.Shape shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX, leftTopY - j * cellHeight, leftTopX + leftCellWidth, leftTopY - (j + 1) * cellHeight);
然後給這個Shape的屬性Data1、Data2、Data3賦值
//第一個單元格用於放統計項名稱<br>
shape.NameU = "某某名稱";<br>
shape.Text = "某某名稱";<br>
shape.Data1 = "tongji";//用tongji來標識Data1這個屬性只是為了在刪除這些框的時候便於查找到
<br>//放置統計內容<br>
shape = VisioUtility.DrawRectangeOnPage(visApp, leftTopX + leftCellWidth, leftTopY - j * cellHeight, <br>
leftTopX + leftCellWidth + rightCellWidth, leftTopY - (j + 1) * cellHeight);<br>
shape.NameU = "某某名稱" + "v";<br>
shape.Data1 = "tongji";<br>//Data2放模具組的名稱,用來獲取相關單位<br>
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的屬性更好用,而且方便,你說呢?