Filtrowanie metadanych
Filtrowanie metadane umożliwia designer zmodyfikować zestaw właściwości, atrybutów i zdarzenia, udostępniane przez składnik lub kontroli w czasie projektowania.
Na przykład Control ma właściwość o nazwie Visible Określa, czy formant jest widoczny.W czasie projektowania jednak kontroli należy zawsze widoczna, niezależnie od wartości tej właściwości, dzięki czemu programista jego położenie na powierzchni projektu.Projektant dla Control zastępuje Visible właściwość własną wersję w czasie projektowania i później przywraca wartość wykonywalna tej właściwości.
Aby wykonać filtrowanie metadanych, Projektant może albo wdrożenie IDesignerFilter interfejsu lub Dodaj ITypeDescriptorFilterService wdrożenia do dostawcy usług w czasie projektowania, który można wykonać filtrowanie metadanych na jakiegokolwiek składnika w środowisku projektowania.
Po zaznaczeniu składnika w czasie projektowania przeglądarki własności kwerendy składnika dla jego atrybuty, zdarzeń i właściwości za pomocą metody TypeDescriptor.Gdy składnik jest badany pod kątem jego atrybuty, zdarzeń i właściwości w trybie projektowania, każdy projektant składnika który implementuje IDesignerFilter interfejsu jest możliwość modyfikowania zestaw atrybutów, zdarzeń i właściwości zwrócony przez składnik.Metody żadnych aktywnych ITypeDescriptorFilterService są nazywane dalej umożliwia filtrowanie atrybutów, zdarzeń i właściwości usługi.
Składnikiem w trybie projektowania zazwyczaj jest badany pod kątem jego atrybuty, zdarzeń i właściwości po Refresh metoda TypeDescriptor nosi nazwę składnika, po odświeżeniu okno właściwości, gdy tryb projektowania ma swoją siedzibę lub ponownie ustanawiane i ustawienie zaznaczenia głównego.Metody innych obiektów lub środowiska czasu projektowania może wywołać metody TypeDescriptor w innym czasie.
Filtrowanie metadanych składnika interfejsu IDesignerFilter
IDesignerFilter Interfejs definiuje zestaw metod, które mogą być zastąpione i wdrożone w projektancie do zmiany właściwości, zdarzenia lub atrybuty narażone przez składnik, zarządzane przez projektanta podczas projektowania.
Każda metoda IDesignerFilter interfejsu jest prefiksem "Pre" lub "Post".Każda metoda jest zakończonymi na "Atrybuty", "Zdarzenia" lub "Właściwości", w zależności od typu elementu członkowskiego pozwala na dodawanie, zmienianie lub usuwanie.Aby dodać atrybuty, zdarzenia lub właściwości, użyj odpowiedniej metody, których nazwa zaczyna się od "Sprzed".Aby zmienić lub usunąć wszystkie atrybuty, zdarzenia lub właściwości, należy użyć odpowiedniej metody, których nazwa zaczyna się od "Post".Metody, których nazwy zaczynają się od "Pre", nazywane są bezpośrednio przed metod, których nazwy zaczynają się od "Post".
Jeśli chcesz dodać atrybutu lub atrybutów, zaimplementować przesłonięcie PreFilterAttributes metodę, która dodaje nowy Attribute do IDictionary przekazany do metody.Klucze w słowniku są typu identyfikatory atrybutów.Aby zmienić lub usunąć atrybutu lub atrybutów, zaimplementować przesłonięcie PostFilterAttributes metody.
Jeśli chcesz dodać zdarzenie lub zdarzenia, należy zaimplementować przesłonięcie PreFilterEvents metodę, która dodaje nowy EventDescriptor do IDictionary przekazany do metody.Klucze w słowniku są nazwy zdarzenia.Aby zmienić lub usunąć zdarzenie lub zdarzenia, należy zaimplementować przesłonięcie PostFilterEvents metody.
Jeśli chcesz dodać właściwości lub właściwości, zaimplementować przesłonięcie PreFilterProperties metodę, która dodaje nowy PropertyDescriptor do IDictionary przekazany do metody.Klucze w słowniku są nazwy właściwości.Aby zmienić lub usunąć właściwość lub właściwości, należy zaimplementować przesłonięcie PostFilterProperties metody.
[!UWAGA]
Gdy klasa rozszerza projektanta, który implementuje IDesignerFilter, każdy PostMethodName metoda powinna wywołać odpowiednie PostMethodName metoda klasy bazowej po zmianie własne atrybuty i każdego zaległeMethodName metoda powinna wywołać odpowiednie PreMethodName metoda klasy bazowej przed zmianą własne atrybuty.
Blok następujący przykład kodu pokazuje podpisów metoda IDesignerFilter interfejsu.
Public Interface IDesignerFilter
Sub PostFilterAttributes(attributes As IDictionary)
Sub PostFilterEvents(events As IDictionary)
Sub PostFilterProperties(properties As IDictionary)
Sub PreFilterAttributes(attributes As IDictionary)
Sub PreFilterEvents(events As IDictionary)
Sub PreFilterProperties(properties As IDictionary)
End Interface
public interface IDesignerFilter {
void PostFilterAttributes(IDictionary attributes);
void PostFilterEvents(IDictionary events);
void PostFilterProperties(IDictionary properties);
void PreFilterAttributes(IDictionary attributes);
void PreFilterEvents(IDictionary events);
void PreFilterProperties(IDictionary properties);
}
Poniższy przykład kodu pokazuje implementacja IDesignerFilter , dodaje Color właściwość projektanta skojarzonego składnika.Trzeba dodać odwołanie do System.Design.dll.
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Windows.Forms.Design
Namespace IDesignerFilterSample
_
Public Class DesignerFilterDesigner
Inherits ComponentDesigner
' Designer color property to add to component.
Public Property TestColor() As Color
Get
Return Me.intcolor
End Get
Set(ByVal Value As Color)
Me.intcolor = Value
End Set
End Property
' Color for TestColor property.
Private intcolor As Color = Color.Azure
Public Function DesignerFilterDesigner()
End Function 'DesignerFilterDesigner
' Adds a color property of this designer to the component.
Protected Overrides Sub PreFilterProperties(ByVal properties As System.Collections.IDictionary)
MyBase.PreFilterProperties(properties)
' Adds a test property to the component.
properties.Add("TestColor", TypeDescriptor.CreateProperty(GetType(DesignerFilterDesigner), "TestColor", GetType(System.Drawing.Color), Nothing))
End Sub 'PreFilterProperties
End Class 'DesignerFilterDesigner
' Component with which the DesignerFilterDesigner is associated.
<Designer(GetType(DesignerFilterDesigner))> _
Public Class TestComponent
Inherits Component
Public Function TestComponent()
End Function 'TestComponent
End Class 'TestComponent
End Namespace
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
namespace IDesignerFilterSample
{
public class DesignerFilterDesigner : ComponentDesigner, IDesignerFilter
{
// Designer color property to add to component.
public Color TestColor
{
get
{ return this.intcolor; }
set
{ this.intcolor = value; }
}
// Color for TestColor property.
private Color intcolor = Color.Azure;
public DesignerFilterDesigner()
{}
// Adds a color property of this designer to the component.
protected override void PreFilterProperties(System.Collections.IDictionary properties)
{
base.PreFilterProperties(properties);
// Adds a test property to the component.
properties.Add("TestColor", TypeDescriptor.CreateProperty(typeof(DesignerFilterDesigner), "TestColor", typeof(System.Drawing.Color), null));
}
}
// Component with which the DesignerFilterDesigner is associated.
[Designer(typeof(DesignerFilterDesigner))]
public class TestComponent : Component
{
public TestComponent()
{}
}
}
Na przykład Windows Forms kontroli projektanta, który implementuje właściwości filtrowania przy użyciu IDesignerFilter interfejsu, zobacz Windows Forms Projektant próbki.
ITypeDescriptorFilterService do filtrowania globalnego metadanych trybu projektowania
Umożliwiają filtrowanie dla każdego składnika w projekcie w czasie projektowania przez dodawanie metadanych ITypeDescriptorFilterService usługodawca, który świadczy usługi w czasie projektowania, wdrażania przy użyciu AddService metoda IServiceContainer interfejs implementowany przez ISite zwrócone przez Site właściwość Component w trybie projektowania.
Poniższy przykład kodu demonstruje, jak dodać ITypeDescriptorFilterService usługi o nazwie ExampleFilterService.
IDesignerHost dh = (IDesignerHost)this.Component.GetService(typeof(IDesignerHost));
if( dh != null )
{
// First gets any previous ITypeDescriptorFilterService to replace when
// the current service is removed, and to call if the new service
// implements service chaining.
ITypeDescriptorFilterService itdfs =
(ITypeDescriptorFilterService)dh.GetService( typeof(ITypeDescriptorFilterService));
oldService = (ITypeDescriptorFilterService)dh.GetService(
typeof(ITypeDescriptorFilterService));
if(oldService != null)
// Removes any old ITypeDescriptorFilterService.
dh.RemoveService(typeof(ITypeDescriptorFilterService));
// Adds an ExampleFilterService that implements service chaining.
dh.AddService(typeof(ITypeDescriptorFilterService),
new ExampleFilterService(oldService));
}
Na przykład ITypeDescriptorFilterService wdrażania, zobacz dokumentacja referencyjna dla ITypeDescriptorFilterService klasy.
Zobacz też
Zadania
Porady: korygowanie atrybutów, zdarzeń i właściwości składnika w trybie projektowania
Koncepcje
Porady: implementowanie projektanta na potrzeby sterowania