Hallo,
ich habe mir mal testweise eine Methode geschrieben, die es mir erlaubt den Aufwand der Word-Anbindung mittels Latebinding etwas zu senken:
private Object Invoke(String Name, BindingFlags Flags, Object Target, Object[] Parameters)
{
Object TempObject = null;
String[] Hierarchy = Name.Split(".".ToCharArray());
for (Int32 i = 0; i < Hierarchy.Length; i++)
{
if (Hierarchy.Length == 1)
TempObject = Target.GetType().InvokeMember(Hierarchy[i], Flags, null, Target, Parameters);
else
{
if (i == 0)
TempObject = Target.GetType().InvokeMember(Hierarchy[i], BindingFlags.GetProperty, null, Target, null);
else
{
if (i == Hierarchy.Length - 1)
TempObject = TempObject.GetType().InvokeMember(Hierarchy[i], Flags, null, TempObject, Parameters);
else
TempObject = TempObject.GetType().InvokeMember(Hierarchy[i], BindingFlags.GetProperty, null, TempObject, null);
}
}
}
return TempObject;
}
Die Benutzung sähe in etwa so aus:
Invoke("Selection.ShapeRange.TextFrame.MarginLeft", BindingFlags.SetProperty, Session, new Object[]{0});
Invoke("Selection.ShapeRange.TextFrame.MarginRight", BindingFlags.SetProperty, Session, new Object[]{0});
Invoke("Selection.ShapeRange.TextFrame.MarginBottom", BindingFlags.SetProperty, Session, new Object[]{0});
Invoke("Selection.ShapeRange.TextFrame.MarginTop", BindingFlags.SetProperty, Session, new Object[]{0});
Man übergibt also quasi den Pfad zur Methode / Eigenschaft und die "Zwischenobjekte" werden dann autom. in der Schleife gelesen.
Ich denke, gerade wenn man wie hier erst mehrere Unterobjekte auslesen muss um an die eigentliche Methode / Eigenschaft zu kommen kann die Methode schon behilflich sein. Aber genau da liegen auch meine Zweifel, denn in meinem Beispiel werden die Objekte "ShapeRange" und "TextFrame" 4 mal gelsesen, also 3 mal unnötig.
Was meint Ihr, kann man diese Tatsache vernachlässigen oder sollte ich lieber etwas mehr Schreibarbeit in Kauf nehmen und dafür auf überflüssige Schritte verzichten???
MfG Hurby