C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处
生活随笔
收集整理的這篇文章主要介紹了
C#进行Visio二次开发之Shape的Data1、Data2、Data3的用处
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們知道,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賦值
????????????????????//第一個單元格用于放統計項名稱
????????????????????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是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賦值
????????????????????//第一個單元格用于放統計項名稱
????????????????????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#进行Visio二次开发之Shape的Data1、Data2、Data3的用处的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在Winform界面中设计图文并茂的
- 下一篇: 《数据库系统概念》9-附加关系运算