Späte Bindung in Office-Lösungen
Einige Typen in den Objektmodellen der Office-Anwendungen bieten Funktionen, die in Funktionen mit später Bindung verfügbar sind. Von einigen Methoden und Eigenschaften können z. B. andere Typen von Objekten abhängig vom Kontext der Office-Anwendung zurückgegeben werden, und von einigen Typen können andere Methoden oder Eigenschaften in anderen Kontexten verfügbar gemacht werden.
Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und Anwendungsebene für Microsoft Office 2010 und 2007 Microsoft Office System. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.
Für Visual Basic-Projekte, in denen Option Strict deaktiviert ist, und Visual C#-Projekte, für die als Zielversion .NET Framework 4 festgelegt wurde, ist eine direkte Zusammenarbeit mit Typen möglich, von denen diese Funktionen mit später Bindung verwendet werden. Für Visual Basic-Projekte, in denen Option Strict aktiviert ist, und Visual C#-Projekte, für die als Zielversion .NET Framework 3.5 festgelegt wurde, muss Umwandlung oder Reflektion verwendet werden, damit die Verwendung der Typen möglich ist.
Implizite und explizite Umwandlung von Objektrückgabewerten
Zahlreiche Methoden und Eigenschaften in den primären Interopassemblys von Microsoft Office geben Object-Werte zurück, da sie mehrere verschiedene Objekttypen zurückgeben können. Die ActiveSheet-Eigenschaft gibt z. B. ein Object-Objekt zurück, da der Rückgabewert ein Worksheet-Objekt oder Chart-Objekt sein kann. Dies ist vom aktiven Blatt abhängig.
Wenn eine Methode oder eine Eigenschaft ein Object-Objekt zurückgibt, muss das Objekt in Visual Basic-Projekten, in denen Option Strict aktiviert ist, und in Visual C#-Projekten, für die als Zielversion .NET Framework 3.5 festgelegt wurde, explizit in den richtigen Typ konvertiert (in Visual Basic) bzw. umgewandelt werden (in C#). In Visual Basic-Projekten, in denen Option Strict deaktiviert ist, und in Visual C#-Projekten, für die als Zielversion .NET Framework 4 festgelegt wurde, sind keine explizit umgewandelten Object-Rückgabewerte verfügbar.
In den meisten Fällen werden in der Referenzdokumentation die möglichen Typen des Rückgabewerts für einen Member aufgeführt, von dem ein Object zurückgegeben wird. Durch Konvertieren oder Umwandeln des Objekts wird IntelliSense für das Objekt im Code-Editor aktiviert.
Informationen zum Konvertieren in Visual Basic finden Sie unter Implizite und explizite Konvertierungen (Visual Basic) und unter CType-Funktion (Visual Basic). Informationen zu Umwandlungsvorgängen in Visual C# finden Sie unter Umwandlung und Typkonvertierungen (C#-Programmierhandbuch) und Operator () (C#-Referenz)
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie ein Objekt in einen bestimmten Typ in einem Visual Basic-Projekt umgewandelt wird, in dem sich Option Strict auf oder in einem Visual C#-Projekt befindet, für das als Zielversion .NET Framework 3.5 festgelegt wurde. In diesen Typen von Projekten muss die Cells-Eigenschaft explizit in ein Range-Objekt umgewandelt werden. Dieses Beispiel erfordert ein Excel-Projekt auf Dokumentebene mit einer Arbeitsblattklasse mit dem Namen Sheet1.
Dim castRange As Excel.Range = CType(Globals.Sheet1.Cells(1, 1), Excel.Range)
Excel.Range castRange = (Excel.Range)Globals.Sheet1.Cells[1, 1];
Im folgenden Codebeispiel wird veranschaulicht, wie ein Objekt implizit in einen bestimmten Typ in einem Visual Basic-Projekt umgewandelt wird, in dem sich Option Strict außerhalb oder innerhalb eines Visual C#-Projekts befindet, für das als Zielversion .NET Framework 4 festgelegt wurde. In diesen Projekttypen wird die Cells-Eigenschaft implizit in ein Range-Objekt umgewandelt. Dieses Beispiel erfordert ein Excel-Projekt auf Dokumentebene mit einer Arbeitsblattklasse mit dem Namen Sheet1.
Dim dynamicRange As Excel.Range = Globals.Sheet1.Cells(1, 1)
Excel.Range dynamicRange = Globals.Sheet1.Cells[1, 1];
Zugreifen auf Member, die nur durch späte Bindung verfügbar sind
Einige Eigenschaften und Methoden in den Office-PIAs sind nur durch späte Bindung verfügbar. In Visual Basic-Projekten, in denen Option Strict außerhalb oder innerhalb von Visual C#-Projekten liegt, für die als Zielversion .NET Framework 4 festgelegt wurde, können Sie die späten Bindungsfunktionen in diesen Sprachen verwenden, um auf spät gebundene Member zuzugreifen. In Visual Basic-Projekten, in denen sich Option Strict auf oder in Visual C#-Projekten befindet, die auf .NET Framework 3.5 abzielen, muss der Zugriff auf die Member mithilfe von Reflektion erfolgen.
Beispiele
Im folgenden Codebeispiel wird veranschaulicht, wie auf spät gebundene Member in einem Visual Basic-Projekt zugegriffen wird, in dem Option Strict außerhalb oder innerhalb eines Visual C#-Projekts liegt, für das als Zielversion .NET Framework 4 festgelegt wurde. In diesem Beispiel wird auf die spät gebundene Name-Eigenschaft des Dialogfelds Datei öffnen in Word zugegriffen. Wenn Sie dieses Codebeispiel verwenden möchten, führen Sie es von der ThisDocument-Klasse oder der ThisAddIn-Klasse in einem Word-Projekt aus.
Private Sub TestDynamicDialog()
Dim dialog As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
dialog.Name = "Testing"
dialog.Show()
MessageBox.Show(dialog.Name)
End Sub
dynamic dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
dialog.Name = "Testing";
dialog.Show();
MessageBox.Show(dialog.Name);
Im folgenden Codebeispiel wird veranschaulicht, wie mithilfe von Reflektion die gleiche Aufgabe in einem Visual Basic-Projekt ausgeführt wird, in dem sich Option Strict auf oder in einem Visual C#-Projekt befindet, für das als Zielversion .NET Framework 3.5 festgelegt wurde.
Dim dlg As Word.Dialog = Application.Dialogs(Word.WdWordDialog.wdDialogFileOpen)
Dim dlgType As Type = GetType(Word.Dialog)
' Set the Name property of the dialog box.
dlgType.InvokeMember("Name", _
Reflection.BindingFlags.SetProperty Or _
Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.Instance, _
Nothing, dlg, New Object() {"Testing"}, _
System.Globalization.CultureInfo.InvariantCulture)
' Display the dialog box.
dlg.Show()
' Show the Name property.
MessageBox.Show(dlgType.InvokeMember("Name", _
Reflection.BindingFlags.GetProperty Or _
Reflection.BindingFlags.Public Or _
Reflection.BindingFlags.Instance, _
Nothing, dlg, Nothing, _
System.Globalization.CultureInfo.InvariantCulture))
Word.Dialog dialog = Application.Dialogs[Word.WdWordDialog.wdDialogFileOpen];
System.Type dialogType = typeof(Word.Dialog);
// Set the Name property of the dialog box.
dialogType.InvokeMember("Name",
System.Reflection.BindingFlags.SetProperty |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance,
null, dialog, new object[] { "Testing" },
System.Globalization.CultureInfo.InvariantCulture);
// Display the dialog box.
dialog.Show(ref missing);
// Show the Name property.
MessageBox.Show(dialogType.InvokeMember("Name",
System.Reflection.BindingFlags.GetProperty |
System.Reflection.BindingFlags.Public |
System.Reflection.BindingFlags.Instance,
null, dialog, null,
System.Globalization.CultureInfo.InvariantCulture).ToString());
Siehe auch
Referenz
Reflektion (C# und Visual Basic)
Konzepte
Schreiben von Code in Office-Projektmappen
Optionale Parameter in Office-Lösungen