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

ZDNet软件频道 时间:2008-07-18 作者: |  我要评论(1)
本文关键词:Visio 界面与窗体 C# Windows
Visio Drawing Control控件使用

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


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134