我遇到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。 系统控制台上的程序将显示:
你能帮助我吗?
P.S。我使用的是EAInterop dll的2.10.0.0版本。
P.S2。我也开始在Sparx论坛上进行对话:http://www.sparxsystems.com/cgi-bin/yabb/YaBB.cgi?num=1409915245/0#0