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

2016-02-19 13:46 10 1 收藏

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

【 tulaoshi.com - 编程语言 】

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

  Visio Drawing Control控件使用

  Visio开发必备

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)  Visio SDK 2007   VisSDK.chm   Visio Code Samples Library.chm

  Visio文档操作

  查看ShapeSheet属性及帮助内容

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

  宏的录制

  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

  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开发必备

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)  Visio SDK 2007   VisSDK.chm   Visio Code Samples Library.chm

  Visio文档操作

  查看ShapeSheet属性及帮助内容

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

  宏的录制

  Visio的几个重要对象

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

  VisioObjects

  Visio XML格式文件分析

  Master格式

  Visio_Master.jpg

  Pages/Shapes格式

  Visio_Page

来源:http://www.tulaoshi.com/n/20160219/1605192.html

延伸阅读
摘要 本文将向你展示如何用C#开发一个Windows服务来记录系统使用情况。 每一个人都想知道他们每天在什么时间启动和关闭自己的系统,以及系统每天运行了多少时间。如果用一个DataGrid控件来显示系统启动、关闭及所消耗的时间将是一个不错的主意。 在本文中,我提供了一种方法来实现这一目标-使用C#开发一个Windows服务。其实,每...
掩码输入是一种常用的控件,我记得第一次看见这种控件是在Visual FoxPro中!感觉功能强,不错。现在用C#开发ASP.NET应用程序也需要用到这种输入的控件,便琢磨着自己做一个。但是由于Visual FoxPro中的掩码文本框功能太强了,一时还不敢去做。网上也有一些自制的如:http://www.weste.net/2004/11-25/09162561988.html,但是感觉功能都不很适合...
如何第二次修改微信号?   1)登陆微信,请点击。 2)找到并点击。 3)输入帐号并确定。         注 :更多精彩教程请关注图老师手机教程栏目,图老师手机数码群:296605639欢迎你的加入
标签: 生活常识
阴茎能二次增长吗 阴茎能二次增长吗 首先:阴茎的长度和人的身高,胖瘦是一样的,都有个体差异,一般成年男性的阴茎长度在软的时候5-6厘米,勃起后可以增大2倍,如果在软时小于4厘米,勃起后小于8厘米属于阴茎短小。必要时治疗需要手术延长。 只要性功能正常,长短不是很重要的问题。 其次:阴茎二次发育都是一种非常渴望的事情,深圳...

经验教程

41

收藏

55
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部