今天图老师小编要向大家分享个如何使用C#进行Visio二次开发教程,过程简单易学,相信聪明的你一定能轻松get!
【 tulaoshi.com - 编程语言 】
本文通过一些实例想大家介绍如何使用C#进行Visio二次开发,虽然应用不是太多,但还是有看看的价值。
Visio Drawing Control控件使用
Visio开发必备
Visio SDK 2007 VisSDK.chm Visio Code Samples Library.chmVisio文档操作
查看ShapeSheet属性及帮助内容
宏的录制
Visio的几个重要对象
Application Window (Application.ActiveWindow) Document (Application.ActiveDocument) Master、Shape  
Visio XML格式文件分析
Master格式
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)  
Pages/Shapes格式
  
图纸的XML文档中,Master后面的Shapes集合中只有一个Shape对象
图纸的Shapes集合有多个对象,每个对象的NameU和Name值可能不一样,一般使用NameU
Visio基本操作的实现
以下是引用片段:
  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}rn", 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} rn", 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); 
   
  /**////  
  /// 打开模具的公共方法 
  ///  
  /// 按引用调用的VisioApplication对象 
  /// 打开的模式 
  private void StencilOpenEx(Application visApp, short flags) 
  { 
   List 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 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 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 GetPropertyCollection(Visio.Shape shape) 
  { 
   List list = new List(); 
   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 list = GetPropertyCollection(shape); 
   StencilPropertyInfo propertyInfo = null; 
   foreach(StencilPropertyInfo tempInfo in list) 
   { 
   if (tempInfo.Name == propertyName) 
   { 
   propertyInfo = tempInfo; 
   break; 
   } 
   } 
   
   return propertyInfo; 
  }
本文通过一些实例想大家介绍如何使用C#进行Visio二次开发,虽然应用不是太多,但还是有看看的价值。
Visio Drawing Control控件使用
Visio开发必备
Visio SDK 2007 VisSDK.chm Visio Code Samples Library.chmVisio文档操作
查看ShapeSheet属性及帮助内容
宏的录制
Visio的几个重要对象
Application Window (Application.ActiveWindow) Document (Application.ActiveDocument) Master、Shape  
Visio XML格式文件分析
Master格式
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)  
Pages/Shapes格式
   
                        
来源:http://www.tulaoshi.com/n/20160219/1605192.html
看过《如何使用C#进行Visio二次开发》的人还看了以下文章 更多>>