|
|
|
|
Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来。 Visio的几个重要对象 Application Window (Application.ActiveWindow) Document (Application.ActiveDocument) Master、Shape
图纸的XML文档中,Master后面的Shapes集合中只有一个Shape对象 VisApplication = this.ctrlDrawing.Document.Application; VisWindow = VisApplication.ActiveWindow; VisDocument = VisApplication.ActiveDocument;![]() //Settings VisApplication.Settings.ShowShapeSearchPane = false; //显示搜索形状窗体 VisApplication.Settings.EnableAutoConnect = false; //自动链接(2007默认) VisApplication.Settings.StencilBackgroundColor = 10070188; //vbGrayText![]() //文档各种显示 VisApplication.DoCmd((short)VisUICmds.visCmdViewRulers); VisApplication.DoCmd((short)VisUICmds.visCmdViewGrid); VisApplication.DoCmd((short)VisUICmds.ShowGuides); VisApplication.DoCmd((short)VisUICmds.ShowConnectPoints); VisApplication.DoCmd((short)VisUICmds.ShowPageBreaks);![]() //各种窗口 VisApplication.DoCmd((short)VisUICmds.visCmdShapesWindow); VisApplication.DoCmd((short)VisUICmds.visCmdPanZoom); VisApplication.DoCmd((short)VisUICmds.visCmdCustProp); VisApplication.DoCmd((short)VisUICmds.visCmdSizePos);![]() ![]() SendKeys.Send("^(x)"); //VisApplication.DoCmd((short)VisUICmds.visCmdUFEditCut); SendKeys.Send("{DELETE}"); //VisApplication.DoCmd((short)VisUICmds.visCmdUFEditClear); SendKeys.Send("^+(p)"); //VisApplication.DoCmd(VisUICmds.visCmdFormatPainter); SendKeys.Send("^(z)"); //VisApplication.DoCmd(VisUICmds.visCmdEditUndo);调用工具条对象、菜单对象的方法 Application.CommandBars Microsoft.Office.Core.CommandBars共享Office对象模型 使用CommandBar代替UIObject CommandBar对象中,菜单及工具条是同一个东西 CommandBar、CommandBarButton、 CommandBarComboBox、CommandBarControl、 和 CommandBarPopup 示例:执行视图中的工具条的所有按钮事件。 Microsoft.Office.Core.CommandBars commandBars; commandBars = (Microsoft.Office.Core.CommandBars)VisApplication.CommandBars;![]() foreach (Microsoft.Office.Core.CommandBarControl control in commandBars["View"].Controls)![]() ![]() { Microsoft.Office.Core.CommandBarButton button = control as Microsoft.Office.Core.CommandBarButton; if (button != null)![]() { button.Execute(); } }![]() StringBuilder sb = new StringBuilder(); foreach (Microsoft.Office.Core.CommandBar bar in commandBars)![]() ![]() { sb.Append(string.Format("CommandBar Name:{0}\r\n", bar.Name)); foreach(Microsoft.Office.Core.CommandBarControl control in bar.Controls)![]() { Microsoft.Office.Core.CommandBarButton button = control as Microsoft.Office.Core.CommandBarButton; if(button != null)![]() { sb.Append(string.Format("Button Name:{0} \r\n", button.Caption)); } } } Form2 frm = new Form2(); frm.txtContent.Text = sb.ToString(); frm.Show();![]() ![]() short flags = (short)VisOpenSaveArgs.visOpenDocked | (short)VisOpenSaveArgs.visOpenRO; StencilOpenEx(wndVisio.Application, flags);![]() ![]() /**//// <summary> /// 打开模具的公共方法 /// </summary> /// <param name="visApp">按引用调用的VisioApplication对象</param> /// <param name="flags">打开的模式</param> private void StencilOpenEx(Application visApp, short flags)![]() ![]() { List<string> stencilList = GetStencils(); string stencilFileName; foreach(string stencil in stencilList)![]() { stencilFileName = GetStencilsFileName(stencil); if(!string.IsNullOrEmpty(stencilFileName))![]() { visApp.Documents.OpenEx(Portal.gc.gStencileFileBasePath + stencilFileName, flags); } } }![]() //关闭模具文件 visApp.Documents["Switch.vss"].Close(); visApp.Documents["Span.vss"].Close(); visApp.Documents["Line.vss"].Close(); visApp.Documents["Label.vss"].Close(); visApp.Documents["Construct.vss"].Close(); visApp.Documents["Monitor.vss"].Close();Visio Shape的属性操作 StringToFormulaForString、FormulaStringToString函数 访问属性 设置属性 添加属性 //列出模具组 this.cmbStencilGroup.Items.Clear(); List<string> stencilGroups = stencil.GetStencils(); foreach (string group in stencilGroups)![]() ![]() { this.cmbStencilGroup.Items.Add(group); }![]() ![]() //根据模具组列出模具 string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text); this.cmbStencil.Items.Clear(); string tempName; foreach (Master master in visApp.Documents[stencilName].Masters)![]() ![]() { tempName = master.Name; if (!stencil.IsExcludeItem(tempName))![]() { this.cmbStencil.Items.Add(tempName); } }![]() ![]() //根据模具,获取对应的属性集合,遍历属性集合,列出属性名称 string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text); string masterName = this.cmbStencil.Text; Visio.Shape shape = visApp.Documents[stencilName].Masters[masterName].Shapes[1]; if (shape != null)![]() ![]() { List<StencilPropertyInfo> propInfos = property.GetPropertyCollection(shape); foreach (StencilPropertyInfo info in propInfos)![]() { this.cmbProperty.Items.Add(info.Name); } }![]() ![]() //根据模具、模具属性,列出对应的属性信息 string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text); string masterName = this.cmbStencil.Text; Visio.Shape shape = visApp.Documents[stencilName].Masters[masterName].Shapes[1]; StencilPropertyInfo info = property.GetProperty(shape, this.cmbProperty.Text); if (info != null)![]() ![]() { this.txtName.Text = info.Name;//属性名称 this.txtValue.Text = info.Value;//属性值 this.txtFormat.Text = info.Format;//属性格式 this.txtSortKey.Text = info.Sort;//属性的排序 this.txtPrompt.Text = info.Prompt;//属性的提示信息 }![]() ![]() //根据模具,获取属性对象集合 public List<StencilPropertyInfo> GetPropertyCollection(Visio.Shape shape)![]() ![]() { List<StencilPropertyInfo> list = new List<StencilPropertyInfo>(); StencilPropertyInfo propertyInfo; Visio.Cell shapeCell; short shortSectionProp = (short)VisSectionIndices.visSectionProp;![]() if (shape != null)![]() { for (short i = 0; i < shape.get_RowCount(shortSectionProp) - 1; i++ )![]() { if (shape.get_CellsSRCExists(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel, 0) != 0)![]() { propertyInfo = new StencilPropertyInfo();![]() shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel); propertyInfo.Name = VisioUtility.FormulaStringToString(shapeCell.RowNameU);![]() shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsPrompt); propertyInfo.Prompt = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsFormat); propertyInfo.Format = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsValue); propertyInfo.Value = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsSortKey); propertyInfo.Sort = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() //shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsType); //propertyInfo.PropType = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() //shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsInvis); //propertyInfo.InVisible = VisioUtility.FormulaStringToString(shapeCell.FormulaU);![]() //![]() ![]() .. list.Add(propertyInfo); } } }![]() return list; }![]() ![]() //根据模具和属性名称,获取属性对象信息 public StencilPropertyInfo GetProperty(Visio.Shape shape, string propertyName)![]() ![]() { List<StencilPropertyInfo> list = GetPropertyCollection(shape); StencilPropertyInfo propertyInfo = null; foreach(StencilPropertyInfo tempInfo in list)![]() { if (tempInfo.Name == propertyName)![]() { propertyInfo = tempInfo; break; } }![]() return propertyInfo; } |









Microsoft.Office.Core.CommandBarButton button 
}
}