Gewusst wie: Hinzufügen und Entfernen von Eigenschaftenseiten
Der Projekt-Designer stellt einen zentralen Ort zum Verwalten von Projekteigenschaften, - einstellungen und von Ressourcen in Visual Studiobereit. Es wird als einzelnes Fenster in der integrierten Entwicklungsumgebung (IDE) Visual Studio und enthält verschiedene Bereiche auf der rechten Seite, die durch die Registerkarten auf der linken Seite zugegriffen werden. Die Bereiche (oft als Eigenschaftenseiten) im Projekt-Designer hängt vom Projekttyp und Sprache. Der Projekt-Designer können mit dem Eigenschaften Befehl im Menü Projekt zugegriffen werden.
Ein Projekt untertyp muss häufig zusätzliche Eigenschaftenseiten im Projekt-Designer anzeigen. Ebenso müssen möglicherweise einige Projekt untertypen, dass die integrierte Eigenschaftenseiten entfernt werden. Um ein auszuführen, muss das Projekt untertyp die IVsHierarchy-Schnittstelle implementieren und die GetProperty-Methode überschreiben. Wenn Sie diese Methode überschreiben und propId-Parameter, der einen der Werte der __VSHPROPID2-Enumeration enthält, können Sie Projekteigenschaften filtern, hinzufügen oder entfernen. Beispielsweise müssen Sie möglicherweise eine Seite anlagenabhängigen den Eigenschaftenseiten auf Hinzufügen. Dazu müssen Sie anlagenabhängige Eigenschaftenseiten filtern und eine neue Seite der vorhandenen Liste dann auf Hinzufügen.
Hinzufügen und Entfernen von Eigenschaftenseiten im Projekt-Designer
So erstellen Sie eine Eigenschaftenseite im Projekt-Designer entfernen
Überschreiben Sie die GetProperty(uint itemId, int propId, out object property)-Methode, um Eigenschaftenseiten zu filtern und zu erhalten eine clsids Liste.
Protected Overrides int GetProperty(uint itemId, int propId, out object property) Protected Overrides Function GetProperty(ByVal itemId As UInteger, ByVal propId As Integer, ByRef [property] As Object) As Integer 'Use propId to filter configuration-independent property pages. Select Case propId .... Case CInt(Fix(__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList)) 'Get a semicolon-delimited list of clsids of the configuration-independent property pages ErrorHandler.ThrowOnFailure(MyBase.GetProperty(itemId, propId, [property])) Dim propertyPagesList As String = ((String)[property]).ToUpper(CultureInfo.InvariantCulture) 'Remove the property page here .... .... End Select .... Return MyBase.GetProperty(itemId, propId, [property]) End Function
protected override int GetProperty(uint itemId, int propId, out object property) { //Use propId to filter configuration-independent property pages. switch (propId) { . . . . case (int)__VSHPROPID2.VSHPROPID_PropertyPagesCLSIDList: { //Get a semicolon-delimited list of clsids of the configuration-independent property pages ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property)); string propertyPagesList = ((string)property).ToUpper(CultureInfo.InvariantCulture); //Remove the property page here . . . . } . . . . } . . . . return base.GetProperty(itemId, propId, out property); }
Entfernen Sie die Buildereignisse Seite erhaltener clsids Liste.
Private buildEventsPageGuid As String = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}" Private index As Integer = propertyPagesList.IndexOf(buildEventsPageGuid) If index <> -1 Then ' GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';' Dim index2 As Integer = index + buildEventsPageGuid.Length + 1 If index2 >= propertyPagesList.Length Then propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(";"c) Else propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2) End If End If 'New property value property = propertyPagesList
string buildEventsPageGuid = "{1E78F8DB-6C07-4D61-A18F-7514010ABD56}"; int index = propertyPagesList.IndexOf(buildEventsPageGuid); if (index != -1) { // GUIDs are separated by ';' so if you remove the last GUID, also remove the last ';' int index2 = index + buildEventsPageGuid.Length + 1; if (index2 >= propertyPagesList.Length) propertyPagesList = propertyPagesList.Substring(0, index).TrimEnd(';'); else propertyPagesList = propertyPagesList.Substring(0, index) + propertyPagesList.Substring(index2); } //New property value property = propertyPagesList;
So erstellen Sie eine Eigenschaftenseite im Projekt-Designer hinzu
Erstellen Sie eine Eigenschaftenseite, die Sie hinzufügen möchten.
Class DeployPropertyPage Inherits Form Implements Microsoft.VisualStudio.OLE.Interop.IPropertyPage 'Summary: Return a stucture describing your property page. .... Public Sub GetPageInfo(ByVal pPageInfo As Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO()) Dim info As PROPPAGEINFO = New PROPPAGEINFO() info.cb = CUInt(Marshal.SizeOf(GetType(PROPPAGEINFO))) info.dwHelpContext = 0 info.pszDocString = Nothing info.pszHelpFile = Nothing info.pszTitle = "Deployment" 'Assign tab name info.SIZE.cx = Me.Size.Width info.SIZE.cy = Me.Size.Height If Not pPageInfo Is Nothing AndAlso pPageInfo.Length > 0 Then pPageInfo(0) = info End If End Sub End Class
class DeployPropertyPage : Form, Microsoft.VisualStudio.OLE.Interop.IPropertyPage { . . . . //Summary: Return a stucture describing your property page. public void GetPageInfo(Microsoft.VisualStudio.OLE.Interop.PROPPAGEINFO[] pPageInfo) { PROPPAGEINFO info = new PROPPAGEINFO(); info.cb = (uint)Marshal.SizeOf(typeof(PROPPAGEINFO)); info.dwHelpContext = 0; info.pszDocString = null; info.pszHelpFile = null; info.pszTitle = "Deployment"; //Assign tab name info.SIZE.cx = this.Size.Width; info.SIZE.cy = this.Size.Height; if (pPageInfo != null && pPageInfo.Length > 0) pPageInfo[0] = info; } }
Registrieren Sie die neue Eigenschaftenseite.
<MSVSIP.ProvideObject(GetType(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)>
[MSVSIP.ProvideObject(typeof(DeployPropertyPage), RegisterUsing = RegistrationMethod.CodeBase)]
Überschreiben Sie die GetProperty(uint itemId, int propId, out object property)-Methode, um Eigenschaftenseiten zu filtern, verwenden Sie eine clsids Liste, und fügen Sie eine neue Eigenschaftenseite hinzufügen.
Protected Overrides Function GetProperty(ByVal itemId As UInteger, ByVal propId As Integer, ByRef [property] As Object) As Integer 'Use propId to filter configuration-dependent property pages. Select Case propId .... case CInt(Fix(__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList)): 'Get a semicolon-delimited list of clsids of the configuration-dependent property pages. ErrorHandler.ThrowOnFailure(MyBase.GetProperty(itemId, propId, [property])) 'Add the Deployment property page. [property] &= ";"c + GetType(DeployPropertyPage).GUID.ToString("B") End Select .... Return MyBase.GetProperty(itemId, propId, [property]) End Function
protected override int GetProperty(uint itemId, int propId, out object property) { //Use propId to filter configuration-dependent property pages. switch (propId) { . . . . case (int)__VSHPROPID2.VSHPROPID_CfgPropertyPagesCLSIDList: { //Get a semicolon-delimited list of clsids of the configuration-dependent property pages. ErrorHandler.ThrowOnFailure(base.GetProperty(itemId, propId, out property)); //Add the Deployment property page. property += ';' + typeof(DeployPropertyPage).GUID.ToString("B"); } } . . . . return base.GetProperty(itemId, propId, out property); }
Hinweis
Alle Codebeispiele in diesem Thema bereitgestellt werden, sind Teil eines umfangreicheren Beispiels, Visual Studio-Erweiterbarkeits-Beispiele.