Persistente Daten in Projekten und Projektmappen
Wenn Sie ein Projekt schließen, werden die Benutzerdaten (z. B. die Variablenwerte) verworfen, selbst wenn Sie die Projektmappe oder das Projekt speichern. Das Automatisierungsmodell von Visual Studio bietet jedoch eine Möglichkeit zum Speichern und Beibehalten dieser Benutzerdaten zwischen den Sitzungen der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE). Dies wird unter Verwendung des Globals-Objekts durch die Globals-Eigenschaft und die Globals-Eigenschaft erreicht. Globals behält die Projektmappenvariablen bei. Globals behält die Projektvariablen bei. Jede Eigenschaft gibt ein Globals-Objekt zurück, mit dessen Membern Sie die Daten speichern, abrufen, auflisten und optional beibehalten können. Durch diesen Vorgang werden beim nächsten Öffnen der Projektmappe oder des Projekts die Werte wiederhergestellt.
Dies ist z. B. sinnvoll, um für einen Befehl stets denselben Standardwert zu verwenden oder das Verhalten eines Befehls nach einer bestimmten Anzahl von Aufrufen zu ändern. Dieses Feature kann auch von Add-Ins verwendet werden, um Daten von Projektmappendateien (SLN-Dateien) beizubehalten und abzurufen.
Einzelheiten zum Verhalten von Global-Objekten
Wird das Globals-Objekt zur IDE zugeordnet, wird der Wert in einem von zwei Speicherorten beibehalten. Für Windows NT 4.0, Windows 2000 Professional und Windows Server 2003 werden die Werte in C:\winnt\Profiles\<Benutzername>\Anwendungsdaten\Microsoft\Visual Studio\extglobal.dat gespeichert. Für Windows 95, Windows 98, Windows 98 Zweite Ausgabe, Windows Millennium Edition werden die Werte in C:\Windows\Profiles\<Benutzername>\Anwendungsdaten\Microsoft\Visual Studio\extglobal.dat gespeichert, wenn der Computer für eine Benutzeranmeldung eingerichtet wurde. Andernfalls gibt es kein Element < Benutzername >. Jedes Mal, wenn die IDE geschlossen wird oder die Operation Alles Speichern auftritt, behält die IDE die globalen Einstellungen bei.
Wird das Globals-Objekt dem Solution2-Objekt zugeordnet, wird der Wert in der SLN-Datei beibehalten. Diese Werte werden beim Speichern der Projektmappendatei beibehalten.
Wird das Globals-Objekt dem Project-Objekt zugeordnet, wird der Wert in der Projektdatei (DSP, VBP usw.) beibehalten. Die Werte werden bei jedem Speichern des Projekts beibehalten.
Die zu speichernden Werte werden in eine Zeichenfolge konvertiert, die beibehalten werden kann, d. h., sie dürfen kein SAFEARRAY, Objekt oder strukturierter Speicher sein. Wenn die Variable nicht in eine Zeichenfolge konvertiert werden kann, wird eine entsprechende Begründung als Zeichenfolgenwert beibehalten.
Immer wenn Variablen beibehalten werden, wird ein Datensatz dieser Variablen und ihrer Werte gespeichert.
Beibehalten von globalen Werten
Im folgenden Makrobeispiel wird die Verwendung des Globals-Objekts und seiner Member veranschaulicht, um den Wert einer Variablen beizubehalten, nachdem die Projektmappe geschlossen wurde. Danach wird der Zugriff auf diesen Wert dargestellt, nachdem die Projektmappe erneut geöffnet wurde. Im Beispiel wird festgehalten, wie oft das Add-In geladen wurde, und die Anzahl wird ausgegeben.
Sub OnAddinLoaded(ByVal dte As DTE)
' Count the number of times an add-in is loaded
' and store the value in the solution.
Dim globals As Globals
globals = dte.Solution.Globals
If globals.VariableExists("AddinLoadCounter") Then
' The counter has already been set, so increment it.
Dim int32 As System.Int32
int32 = System.Int32.Parse(CStr(globals("AddinLoadCounter")))
int32 += 1
globals("AddinLoadCounter") = int32.ToString()
Else
' Counter has never been set, so create and initialize it.
globals("AddinLoadCounter") = 1.ToString()
globals.VariablePersists("AddinLoadCounter") = True
End If
MsgBox("This add-in has been loaded: " & _
globals.VariableValue("AddinLoadCounter") & " times.")
End Sub
void OnAddinLoaded(_DTE applicationObject)
{
// Count the number of times an add-in is loaded
// and store the value in the solution.
Globals globals;
globals = applicationObject.Solution.Globals;
if(globals.get_VariableExists("AddinLoadCounter"))
{
// The counter has already been set, so increment it.
System.Int32 int32;
int32 = System.Int32.Parse((string)
globals["AddinLoadCounter"]);
int32++;
globals["AddinLoadCounter"] = int32.ToString();
}
else
{
// Counter has never been set, so create and initialize it.
globals["AddinLoadCounter"] = 1.ToString();
globals.set_VariablePersists("AddinLoadCounter", true);
}
System.Windows.Forms.MessageBox.Show("This add-in has been loaded:
" + globals.VariableValue["AddinLoadCounter"] + " times.");
}
Siehe auch
Aufgaben
Gewusst wie: Hinzufügen und Ändern von Befehlen
Gewusst wie: Erstellen von Add-Ins
Exemplarische Vorgehensweise: Erstellen eines Assistenten
Konzepte
Diagramm "Automationsobjektmodell"
Weitere Ressourcen
Erstellen und Steuern von Umgebungsfenstern