C#举行Visio2次开发之鸡毛蒜皮(一)

本文主要分享部分在Visio一次开发中蒙受的各个符合规律及其化解办法:

  1. 为图元设置颜色
    在一部分剖析中,如电气线路分析中,要求基于差别的情况改变图元的颜料,那么怎么样转移指定图元的设施颜色吗?上面提供代码化解该难点。

图片 1  shape.get_CellsU(“LineColor”).ResultIU = (double)VisDefaultColors.visDarkGreen;//有电(绿色)
图片 2

其中VisDefaultColors是一个枚举,有无数颜料,可以查下SDK,也可以动用其对应的数值来代替

Constant Value Description

visBlack

0

Black

visBlue

4

Blue

visCyan

7

Cyan

visDarkBlue

10

Dark blue

visDarkCyan

13

Dark cyan

visDarkGray

19

Dark gray

visDarkGreen

9

Dark green

visDarkRed

8

Dark red

visDarkYellow

11

Dark yellow

…………

地点的代码是比较简单的写法,当然也得以采纳上边那种形式:

图片 3shape.get_CellsSRC((short)VisSectionIndices.visSectionObject, (short)VisRowIndices.visRowLine,(short)VisCellIndices.visLineColor).FormulaU = 4

  1. 拿到图元设备的连接关系
    各个设备Shape都有三个Connects和FromConnects集合,该集合是Connect对象集合,每一种Connect有ToSheet和FromSheet属性,分别是指向3个Shape对象,大家若是要拿到装备的涉及关系,就是内需看清那几个Connect的ToSheet和FromSheet属性。
    如下代码:

图片 4            string strShapes = “;”;
图片 5            if (IsSpecialEquipTypeInShape(shape))
图片 6图片 7            图片 8{
图片 9                foreach (Visio.Connect connect in shape.Connects)
图片 10图片 11                图片 12{
图片 13                    strShapes += GetConnectsShapes(shape, connect.ToSheet);     //检查衔接的设备
图片 14                    strShapes += GetConnectsShapes(shape, connect.FromSheet);   //检查接出的设施
图片 15                }
图片 16
图片 17                foreach (Visio.Connect connect in shape.FromConnects)
图片 18图片 19                图片 20{
图片 21                    strShapes += GetConnectsShapes(shape, connect.ToSheet);     //检查衔接的装备
图片 22                    strShapes += GetConnectsShapes(shape, connect.FromSheet);   //检查接出的配备
图片 23                }
图片 24            }

图片 25图片 26        /**//// <summary>
图片 27        /// 获取与眼下的图元连接(接入或接出)的具备相关设备
图片 28        /// </summary>
图片 29        private string GetConnectsShapes(Visio.Shape shape, Visio.Shape toFromSheet)
图片 30图片 31        图片 32{
图片 33            string strShapes = string.Empty;
图片 34            bool exist = VisioUtility.ShapeCellExist(toFromSheet, “设备档次”);
图片 35            bool isSpecial = IsSpecialEquipTypeInShape(toFromSheet);
图片 36
图片 37            if (toFromSheet != null && exist && isSpecial)
图片 38图片 39            图片 40{
图片 41                //Visio图元的连接集合,会存放本身作者的,所以那边须要判定。
图片 42                if (shape.ID != toFromSheet.ID)
图片 43图片 44                图片 45{
图片 46                    strShapes += string.Format(“{0};”, toFromSheet.ID);
图片 47                }
图片 48            }
图片 49
图片 50            return strShapes;
图片 51        }

  1. 赢得图元的品质集合
    咱们知道,逐个图元Shape甚至Page对象都有众多自定义属性,你可以由此在Visio的开支格局中查阅ShapeSheet查看到。而持有这几个属性中,每行又象征三个本性的种种定义音信,如Label是什么样,Prompt(提醒)是什么样,Value(值)是怎么着,Type(类型)是怎么,那就有点类似于我们在数据库定义多个字段,要求指定字段的称谓,类型等等,那假诺大家必要把那几个音信保存下来,大家该怎样拿到呢?上面举例表达:

图片 52            Dictionary<string, StencilPropertyInfo> list = new Dictionary<string, StencilPropertyInfo>();
图片 53            StencilPropertyInfo propertyInfo;
图片 54            Visio.Cell shapeCell;
图片 55            short shortSectionProp = (short)VisSectionIndices.visSectionProp;
图片 56
图片 57            if (shape != null)
图片 58图片 59            图片 60{
图片 61                for (short i = 0; i < shape.get_RowCount(shortSectionProp); i++)
图片 62图片 63                图片 64{
图片 65                    if (shape.get_CellsSRCExists(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel, 0) != 0)
图片 66图片 67                    图片 68{
图片 69                        propertyInfo = new StencilPropertyInfo();
图片 70
图片 71                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel);
图片 72                        propertyInfo.Name = VisioUtility.FormulaStringToString(shapeCell.RowNameU);
图片 73
图片 74                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsPrompt);
图片 75                        propertyInfo.Prompt = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
图片 76
图片 77                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsFormat);
图片 78                        propertyInfo.Format = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
图片 79
图片 80                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsValue);
图片 81                        propertyInfo.Value = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
图片 82
图片 83                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsSortKey);
图片 84                        propertyInfo.SortKey = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
图片 85
图片 86                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsType);
图片 87                        propertyInfo.PropType = (PropType)shapeCell.get_ResultInt((short)VisUnitCodes.visNumber, 0);

图片 88                        shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsInvis);
图片 89                        if (“True”.Equals(VisioUtility.FormulaStringToString(shapeCell.FormulaU), StringComparison.OrdinalIgnoreCase))
图片 90图片 91                        图片 92{
图片 93                            propertyInfo.InVisible = true;
图片 94                        }
图片 95
图片 96                        propertyInfo.PropRowID = i;                       
图片 97
图片 98                        if(!list.ContainsKey(propertyInfo.Name))
图片 99图片 100                        图片 101{
图片 102                            list.Add(propertyInfo.Name, propertyInfo);
图片 103                        }
图片 104                    }
图片 105                }
图片 106            }
图片 107
图片 108            return list;

  1. 闭馆视图中开辟的拥有模具
    貌似的话,2个Visio文档,一般会打开很多模具窗口,用来援助画图的,大家有时候不小心关闭部分,又有大概打开多几个,那么您是怎么着记住那个打开的模具文件的吧,我们要如何关闭全部啊,你能够采取TryCatch来关闭每一种文件,即便它恐怕曾经关闭了,那种才确保不会出错;大家不太喜欢暴力,还有没有更好的点子吗,让它本人领会那一个可以关闭的吗?

图片 109图片 110        /**//// <summary>
图片 111        /// 关闭视图中打开的有所模具
图片 112        /// </summary>
图片 113        /// <param name=”visApp”></param>
图片 114        /// <returns></returns>
图片 115        public bool CloseAllStencileDocument(Application visApp)
图片 116图片 117        图片 118{
图片 119            string[] strs = new string[0];
图片 120            Array arr = strs as Array;
图片 121            visApp.Documents.GetNames(out arr);
图片 122            Document visDoc;
图片 123            foreach (object file in arr)
图片 124图片 125            图片 126{
图片 127                if (file.ToString().IndexOf(“.vss”, StringComparison.OrdinalIgnoreCase) > 0)
图片 128图片 129                图片 130{
图片 131                    visDoc = visApp.Documents[file];
图片 132                    if (visDoc != null)
图片 133图片 134                    图片 135{
图片 136                        visDoc.Close();
图片 137                    }
图片 138                }
图片 139            }
图片 140            return true;
图片 141        }

  1. 管住Visio内置的窗口
    Visio控件提供了重回看到的窗口,你可以依据必要显示大概隐藏它,如作者辈平时看到的图元属性窗口、形状查询窗口、模具管理窗口等等,很独立的例子,我们广大时候不要求极度样子查询窗口,想把它隐藏,那么那么些该怎么样操作呢?
    本身前边写过的篇章C#展开Visio一次开发的宽泛难点处理
    有表达,如下所示:

图片 142        //Visio2006的造型窗口中除去搜索形状功用
图片 143            VisApplication.Settings.ShowShapeSearchPane = false;
图片 144
图片 145图片 146            Visio二〇〇二的ShowShapeSearchPane完结形式Visio二〇〇三的ShowShapeSearchPane完毕方式#region Visio二零零四的ShowShapeSearchPane已毕方式
图片 147            //Window searchWindow = wndVisio.Windows.get_ItemFromID(Convert.ToInt16(VisWinTypes.visWinIDShapeSearch));
图片 148            //if (searchWindow != null)
图片 149            //{
图片 150            //    searchWindow.Visible = false;
图片 151            //} 
图片 152            #endregion

再有一种格局得以管理窗口,如下边代码,对种种内置的窗口完结了联合的管理

图片 153图片 154                for (int i = drawingControl.Window.Windows.Count; i > 0; i–) 图片 155{
图片 156                    Window visWindow;
图片 157                    int windowType;
图片 158
图片 159                    visWindow = drawingControl.Window.Windows.get_ItemEx(i);
图片 160                    windowType = visWindow.Type;
图片 161
图片 162图片 163                    if (windowType == (int) VisWinTypes.visAnchorBarBuiltIn) 图片 164{
图片 165
图片 166                        switch (visWindow.ID) 
图片 167图片 168                        图片 169{
图片 170                            case (int) VisWinTypes.visWinIDCustProp:
图片 171                            case (int) VisWinTypes.visWinIDDrawingExplorer:
图片 172                            case (int) VisWinTypes.visWinIDMasterExplorer:
图片 173                            case (int) VisWinTypes.visWinIDPanZoom:
图片 174                            case (int) VisWinTypes.visWinIDShapeSearch:
图片 175                            case (int) VisWinTypes.visWinIDSizePos:
图片 176                            case (int) VisWinTypes.visWinIDStencilExplorer:
图片 177
图片 178                                visWindow.Visible = false;
图片 179                                break;
图片 180
图片 181                            default:
图片 182                                break;
图片 183                        }
图片 184                    }
图片 185                }

那下驾驭了略微了啊,要饮水思源哦

图片 186转发请注解出处:
图片 187撰写人:伍华聪  http://www.iqidi.com 

相关文章