科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何使用C#进行Visio二次开发

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

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

作者:wuhuacong 来源:天极网 2007年12月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

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

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章