网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > ASP.Net精品代码 > 正文

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

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

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

  Visio Drawing Control控件使用

  Visio开发必备

  1.   Visio SDK 2007
  2.   VisSDK.chm
  3.   Visio Code Samples Library.chm

  Visio文档操作

  查看ShapeSheet属性及帮助内容

  宏的录制

  Visio的几个重要对象

  1.    Application
  2.    Window (Application.ActiveWindow)
  3.    Document (Application.ActiveDocument)
  4.    Master、Shape

  VisioObjects

  Visio XML格式文件分析

  Master格式

  Visio_Master.jpg

  Pages/Shapes格式

  Visio_Page

  图纸的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}\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);
  
  /**//// 
  /// 打开模具的公共方法
  /// 
  /// 按引用调用的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;
  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;
  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;
  }

设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师