【问题标题】:Visio: Cannot find shape in a group shapeVisio:在组形状中找不到形状
【发布时间】:2018-04-06 17:37:23
【问题描述】:

我正在使用 Microsoft.Office.Interop.Visio 库将 vba 代码传输到 c#。我很难弄清楚为什么会出现“找不到对象名称”异常。代码如下:

foreach (IVisio.Shape t in GroupStall.Shapes)
                    {
                        Console.WriteLine(t.Name);
                    }
                    var aa = "door" + index;
                    IVisio.Shape test = GroupStall.Shapes.ItemU[aa];

我将 for each 循环用于调试目的。在 foreach 的输出中是:

headrail2
headrail1
toilet1
toprail1
siderail1A
door1
stallwidth1

我已经知道那里存在“door1”,所以我不需要总是通过一个 foreach 循环来将它分配给一个形状对象。但是当我将“door1”形状分配给“测试”时,我得到了异常,“找不到对象名称。”有什么帮助吗?

【问题讨论】:

    标签: c# vba visio


    【解决方案1】:

    已经找到了我自己问题的答案。在 C# 中,如果您想使用您使用的形状名称来分配形状对象:

    IVisio.Shape test = GroupStall.Shapes["name"]
    

    我觉得这很奇怪,因为我无法在 VBA 中执行此操作,VBA 你必须使用 item 方法按名称查找形状:

    test = GroupStall.Shapes.Item("name")
    

    希望这可以帮助其他任何使用 C# 在 vi​​sio 中进行开发的人。

    【讨论】:

    • 您认为您的 C# 索引器正在调用哪个成员?没错,一些get_Item 方法。此外,如果Shapes 是一个集合类,按照惯例,它的Item 属性应该是它的默认成员,这意味着Set test = GroupStall.Shapes("name") 应该可以工作。请注意 VBA 中分配任何对象引用所需的 Set 关键字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多