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

开发者在线 Builder.com.cn 更新时间:2008-07-18作者: 来源:

本文关键词: Visio 界面与窗体 C#

Visio Drawing Control控件使用

Visio开发必备

Visio SDK 2007
VisSDK.chm
Visio Code Samples Library.chm
Visio文档操作

查看ShapeSheet属性及帮助内容

宏的录制

Visio的几个重要对象

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

图1

Visio XML格式文件分析

Master格式

图2

Pages/Shapes格式

图3

图纸的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("");
//VisApplication.DoCmd((short)VisUICmds.visCmdUFEditClear);
SendKeys.Send("^+(p)");
//VisApplication.DoCmd(VisUICmds.visCmdFormatPainter);
SendKeys.Send("^(z)");
//VisApplication.DoCmd(VisUICmds.visCmdEditUndo);

#p#

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

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: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: 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;
}

用户评论

  • 用户名
  • 评论内容