如何使用C#进行Visio二次开发

快看楼下那2货

快看楼下那2货

2016-02-19 13:46

今天图老师小编要向大家分享个如何使用C#进行Visio二次开发教程,过程简单易学,相信聪明的你一定能轻松get!

  本文通过一些实例想大家介绍如何使用C#进行Visio二次开发,虽然应用不是太多,但还是有看看的价值。

  Visio Drawing Control控件使用

  Visio开发必备

  Visio SDK 2007   VisSDK.chm   Visio Code Samples Library.chm

  Visio文档操作

  查看ShapeSheet属性及帮助内容

  宏的录制

  Visio的几个重要对象

   Application    Window (Application.ActiveWindow)    Document (Application.ActiveDocument)    Master、Shape

  VisioObjects

  Visio XML格式文件分析

  Master格式

  Visio_Master.jpg

  Pages/Shapes格式

  Visio_Page

  图纸的XML文档中,Master后面的Shapes集合中只有一个Shape对象

  图纸的Shapes集合有多个对象,每个对象的NameU和Name值可能不一样,一般使用NameU

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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);

  调用工具条对象、菜单对象的方法

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  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.chm

  Visio文档操作

  查看ShapeSheet属性及帮助内容

  宏的录制

  Visio的几个重要对象

   Application    Window (Application.ActiveWindow)    Document (Application.ActiveDocument)    Master、Shape

  VisioObjects

  Visio XML格式文件分析

  Master格式

  Visio_Master.jpg

  Pages/Shapes格式

  Visio_Page

展开更多 50%)
分享

猜你喜欢

如何使用C#进行Visio二次开发

编程语言 网络编程
如何使用C#进行Visio二次开发

基于SolidEdge的二次开发技术的应用

autocad教程
基于SolidEdge的二次开发技术的应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

基于CATIA的界面二次开发方法与实例

autocad教程
基于CATIA的界面二次开发方法与实例

ANSYS命令流、二次开发与HELP文档-理解网格划分

autocad教程
ANSYS命令流、二次开发与HELP文档-理解网格划分

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

怎么对文件进行二次压缩

电脑网络
怎么对文件进行二次压缩

公积金二次置业如何贷款

生活常识
公积金二次置业如何贷款

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

玩转Win8锁屏的技巧

玩转Win8锁屏的技巧

用 C# 编程实现读写Binary

用 C# 编程实现读写Binary
下拉加载更多内容 ↓