网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 定作论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 交易代码 > ASP.Net精品代码 > 正文
如何使用C#进行Visio二次开发
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 佚名 来源: 网络 发布时间: 10/11/03

  本文通过一些实例想大家介绍如何使用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;
  }

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号