DiagramObject接口,方法Update()不起作用

时间:2014-09-11 10:49:30

标签: c# enterprise-architect

我遇到Update()方法的问题,调用EA.DiagramObject对象。我想在图上更改win32控件的坐标。当按钮,复选框等位于图表内部时,它可以正常工作。但是当这个控制在另一个内部时 - win32Dialog它不起作用。我通过对字段(左,右,上,下)进行更改来设置值。 当控件放在图表中时(不是其他控件的子控件),在调用方法Update()和图表重新加载后,一切正常 - 控件改变其坐标。 当控件放在win32Dialog中时,控件坐标的新值只有在调用Update()之前才会出现。在调用方法之后,左边和右边(例如10)以及顶部和底部(例如40)的边距值是相同的,但它不应该是。在eap文件中,所有子控件的坐标都设置为win32Dialog左上角坐标 - (应该是不同的)。 我观察到 - 当使用调试模式时 - 调用方法,更改此值(仅当控件放在win32Dialog中时。在我的程序中放置win32DIalog中的控件)。

测试此问题的项目:

public class Program
{
    private EA.Diagram MyDiagram;
    private EA.Repository repository = null;

    private void Resize()
    {
        if (repository == null)
        {
            repository = new EA.Repository();
            repository.OpenFile("d:\\eatest.eap");
        }
        MyDiagram = GetDiagram(repository);

        for (short iDO = 0; iDO < MyDiagram.DiagramObjects.Count; iDO++)
        {
            EA.DiagramObject diagramObject = (EA.DiagramObject)MyDiagram.DiagramObjects.GetAt(iDO);
            var a = repository.GetElementByID(diagramObject.ElementID);

            Console.WriteLine(a.Stereotype);
            Console.WriteLine("\nBefore update: ");
            Console.WriteLine("left: " + diagramObject.left + " right: " + diagramObject.right + " top: " + diagramObject.top + " bottom: " + diagramObject.bottom);

            diagramObject.right += 50;
            diagramObject.bottom += 50;

            Console.WriteLine("\nAfter resizing:");
            Console.WriteLine("left: " + diagramObject.left + " right: " + diagramObject.right + " top: " + diagramObject.top + " bottom: " + diagramObject.bottom);

            diagramObject.Update();

            Console.WriteLine("\nAfter update: ");
            Console.WriteLine("left: " + diagramObject.left + " right: " + diagramObject.right + " top: " + diagramObject.top + " bottom: " + diagramObject.bottom);

            Console.ReadLine();
            Console.WriteLine();
            Console.WriteLine();

        }
        repository.ReloadDiagram(MyDiagram.DiagramID);
    }

    public static EA.Diagram GetDiagram(EA.Repository m_Repository)
    {
        EA.Package MyModel = (EA.Package)m_Repository.Models.GetAt(0);
        for (short iPackage = 0; iPackage < MyModel.Packages.Count; iPackage++)
        {
            EA.Package MyPackage = (EA.Package)MyModel.Packages.GetAt(iPackage);

            for (short iDiagram = 0; iDiagram < MyPackage.Diagrams.Count; iDiagram++)
            {
                var a = (EA.Diagram)MyPackage.Diagrams.GetAt(iDiagram);
                return (EA.Diagram)MyPackage.Diagrams.GetAt(iDiagram);
            }
        }

        return null;
    }

    static void Main(string[] args)
    {
        Program prog = new Program();
        prog.Resize();
    }
}

第19行是EA项目的定义路径。项目里面应该有一个win32Dialog和win32controls。 系统控制台上的程序将显示:

  • 控件类型(win32Dialog,按钮等)
  • 边距值(左,右,上,下)来自eap
  • 调整大小后的边距值
  • 调用Update()后的边距值。

你能帮助我吗?

P.S。我使用的是EAInterop dll的2.10.0.0版本。

P.S2。我也开始在Sparx论坛上进行对话:http://www.sparxsystems.com/cgi-bin/yabb/YaBB.cgi?num=1409915245/0#0

0 个答案:

没有答案