c# - 使用 C# 在 Visio 中创建状态图

标签 c# office-interop visio

任何人都可以指出如何在 visio 中以编程方式创建状态图的示例吗? 我可以创建空白页面、水滴形状、打开模板等,但当我尝试添加过渡时,它会提示页面类型不正确。

到处都找不到样本。

或者:我可以将创建图表的用户操作保存为宏。我可以以编程方式运行它吗?

谢谢。

<编辑>
离开电脑 2 分钟,你意识到你应该把代码片段放在问题中而不是试图把它放在评论中。森林:遇见树木......

Visio.Document umlStencil = visioApp.Documents.OpenEx(@"UMLSTA_M.vss", (short)VisOpenSaveArgs.visOpenDocked);  
Visio.Page page = visioDoc.Pages.Add();  
Visio.Shape s1 = page.Drop(umlStencil[@"State"], 5.0, 5.0);  
Visio.Shape s2 = page.Drop(umlStencil[@"State"], 5.0, 5.0);  
Visio.Shape transition = page.Drop(umlStencil[@"Transition"], 1.0, 1.0);  

如您所见,与下面答案中的片段非常相似。

最佳答案

这是我使用 Visual Studio 2010 针对 Visio 2007 和 Visio 2010 运行的代码。

var visioApp = new Visio.Application();

// Load the UML Statechart stencil (docked)
var stencil_open_flags = Visio.VisOpenSaveArgs.visOpenDocked;
var umlStencil = visioApp.Documents.OpenEx(@"UMLSTA_M.vss", (short)stencil_open_flags);

// create a new empty doc based on the UML Model Template
var doc = visioApp.Documents.AddEx("UMLMOD_U.VST", Visio.VisMeasurementSystem.visMSUS, 0, 0); 
var page = doc.Pages.Add();

// Find and manually change the diagram's title 
var watermark = page.Shapes["Watermark Title"];
var LockTextEdit_cell = watermark.CellsU["LockTextEdit"];
LockTextEdit_cell.FormulaForceU = "GUARD(0)";
watermark.Text = "MyTitle";
LockTextEdit_cell.FormulaForceU = "GUARD(1)";

// Find the masters we need
var state_master = umlStencil.Masters["State"];
var transition_master = umlStencil.Masters["Transition"];

// Drop the masters into the page
var s1 = page.Drop(state_master, 5.0, 5.0);
var s2 = page.Drop(state_master, 1.0, 1.0);
var transition = page.Drop(transition_master, 3.0, 3.0);

关于c# - 使用 C# 在 Visio 中创建状态图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7592860/

相关文章:

vb.net - 如何通过Word Interop专门对齐每个段落?

c# - 包含来自 SSRS 报告的多个工作表的 Excel 文件

c# - EF 删除子集合

c# - 使用 C# 提取 powerpoint 标题

c# - 从 DbSet 获取 DbContext

sql-server-2008 - Visio 2010数据源未显示在反向工程师向导中

dependencies - UML:组合或依赖

vba - 安装 2 个版本时在 vba 中创建 Visio 实例

c# - 为什么.NET Framework 中存在两个相同的接口(interface)?

c# - 如何在 Unity - Android 中以这种共享 Intent 的方式强制选择器?