改变跨职能流程图的方向

问题描述 投票:0回答:1

使用 C# 和 Microsoft Interop Office Visio,我尝试改变跨职能流程图的方向。

要手动执行此操作,我必须执行以下操作:

  1. 点击菜单栏中的跨职能流程图
  2. 单击功能区中的方向
  3. 选择从左到右或从右到左

我正在使用 Visio 2019。

如果这可以使用 VB 或 VB.net 来完成,那也很好。任何可以自动化这个过程的东西。

c# office-interop visio
1个回答
0
投票

跨功能流程图模板是具有支持插件的解决方案之一。该插件提供了功能区控件以及对解决方案中各种形状的写入。您可以使用 SDK 中的事件监视器工具来查看哪些单元格发生了更改,但有时最好让插件处理这项工作,因为它可能(在本例中)设置多个单元格。

对于这个解决方案,您似乎不必担心选择的形状,因此您只需使用正确的参数调用正确的插件即可。

示例可能如下所示:

void Main()
{
    var vApp = MyExtensions.GetRunningVisio();  
    var vPag = vApp.ActivePage;
    
    // Create selection based on master to get hold of the shape instance
    Visio.Master cffMaster = vPag.Document.Masters["CFF Container"];
    Visio.Selection sel = vPag.CreateSelection(Visio.VisSelectionTypes.visSelTypeByMaster,
                                           Visio.VisSelectMode.visSelModeSkipSuper,
                                           cffMaster);
    Visio.Shape cffShape = sel.Count > 0 ? sel[1] : null;   
    
    ToggleCffDirection(cffShape);
}

private void ToggleCffDirection(Visio.Shape cffShape)
{
    if (cffShape is null)
        throw new ArgumentNullException(nameof(cffShape));

    if (cffShape.HasCategory("CFF Container"))
    {
        bool isRtl = cffShape.CellsU["User.RTL"].ResultIU != 0;
        
        // Find the Cross Functional Flowchart addon based on its universal name
        foreach (Visio.Addon addon in cffShape.Application.Addons)
        {
            if (addon.NameU.Equals("CFF", StringComparison.Ordinal))
            {
                if (isRtl)
                {
                    addon.Run("/left_to_right");
                }
                else
                {
                    addon.Run("/right_to_left");
                }
                break;
            }
        }
    }
}

您可能希望通过在方法外部找到插件并将其作为参数传递来改进代码,但这取决于您在代码的其余部分中所做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.