Sdílet prostřednictvím


Filtrování metadat

Metadata filtrování umožňuje Návrhář upravit sadu vlastností, atributy a události, které jsou vystaveny komponenta nebo ovládací prvek v době návrhu.

Například Control má vlastnost pojmenovanou Visible , určuje, zda je zobrazen ovládací prvek.V době návrhu však ovládací prvek by měl vždy zůstat viditelný, bez ohledu na hodnotu této vlastnosti tak, aby Vývojář můžete umístit na plochu návrhu.Návrhář pro Control nahradí Visible vlastnost s vlastní verzí v době návrhu a později obnoví spuštění hodnotu této vlastnosti.

Provést filtrování metadata, návrháře, můžete buď provést IDesignerFilter rozhraní nebo přidat ITypeDescriptorFilterService provádění poskytovateli služby návrhu lze provádět filtrování metadata na libovolné součásti v návrhu prostředí.

Pokud součást je vybrána v době návrhu, prohlížeč vlastností dotazy prostřednictvím metody součásti pro jeho atributy, události a vlastnosti TypeDescriptor.Pokud součást je dotazován na jeho atributy, události a vlastnosti v návrhovém režimu, jakékoli Návrhář komponenty, implementuje IDesignerFilter rozhraní je dána příležitost upravit sadu atributů, události a vlastnosti vrácený komponentou.Metody žádné aktivní ITypeDescriptorFilterService se nazývají další službu provést filtrování atributů, události a vlastnosti.

Součásti v režimu návrhu je obvykle dotazován na jeho atributy, události a vlastnosti při Refresh metody TypeDescriptor se nazývá součásti, při aktualizaci okna Vlastnosti při režimu návrhu je usazen nebo obnoveno a při nastavení primárního výběru.Metody návrhu prostředí nebo jiných objektů může volat metody TypeDescriptor jindy.

IDesignerFilter rozhraní pro filtrování součást metadat

IDesignerFilter Rozhraní definuje sadu metod, které můžete přepsat a implementována v Návrháři měnit vlastnosti, události nebo atributy, které jsou vystaveny součástí spravované Návrhář v době návrhu.

Každou metodu IDesignerFilter rozhraní předchází "Před" nebo "Post".Každá metoda je dat "Atributy", "Událostí" nebo "Vlastnosti", v závislosti na typu člena umožňuje přidat, změnit nebo odebrat.Chcete-li přidat všechny atributy vlastnosti, události nebo pomocí příslušné metody, jejichž jméno začíná písmenem "Před".Chcete-li změnit nebo odebrat všechny atributy, události nebo vlastnosti, použijte odpovídající metodu, jejichž jméno začíná písmenem "Post".Metody, jejichž názvy začínají řetězcem "Před" se nazývají bezprostředně před metod, jejichž názvy začínají řetězcem "Post".

Pokud chcete přidat atribut nebo atributy, implementovat přepsání PreFilterAttributes metoda, která přidá nový System.Attribute se IDictionary předán metodě.Klíče ve slovníku jsou ID typu atributů.Chcete-li změnit nebo odebrat atribut nebo atributy, implementovat přepsání PostFilterAttributes metoda.

Pokud chcete přidat události nebo události, implementovat přepsání PreFilterEvents metoda, která přidá nový EventDescriptor se IDictionary předán metodě.Klíče ve slovníku jsou názvy událostí.Chcete-li změnit nebo odebrat události nebo události, implementovat přepsání PostFilterEvents metoda.

Pokud chcete přidat vlastnosti nebo vlastnosti, implementovat přepsání PreFilterProperties metoda, která přidá nový PropertyDescriptor se IDictionary předán metodě.Klíče ve slovníku jsou názvy vlastností.Chcete-li změnit nebo odebrat vlastnosti nebo vlastnosti, implementovat přepsání PostFilterProperties metoda.

[!POZNÁMKA]

Pokud třída rozšiřuje Návrhář, který implementuje IDesignerFilter, každý PostMethodName by volání metody odpovídající PostMethodName metody základní třídy po změně jeho vlastní atributy a každou PreMethodName by volání metody odpovídající PreMethodName metody základní třídy před změnou jeho vlastní atributy.

Následující blok kódu příkladu ukazuje metodu podpisy IDesignerFilter rozhraní.

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);
}

Následující příklad kódu ukazuje implementace IDesignerFilter , přidá Color vlastnost Návrhář přidružené součásti.Potřebujete-li přidat odkaz na 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()
      {}
   }
}

Příklad model Windows Forms řízení Návrhář, který implementuje vlastnosti filtrování pomocí IDesignerFilter rozhraní, naleznete Model Windows Forms Designer vzorku.

ITypeDescriptorFilterService pro filtrování globální Metadata režimu návrhu

Filtrování pro všechny komponenty v návrhu projektu přidáním metadat může poskytnout ITypeDescriptorFilterService provádění poskytovatel metadat, která poskytuje služby v době návrhu pomocí AddService metodu IServiceContainer rozhraní implementovaných ISite vrácené Site vlastnost Component umístěny v návrhovém režimu.

Následující příklad kódu ukazuje, jak lze přidat ITypeDescriptorFilterService službu s názvem 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));
}

Příklad ITypeDescriptorFilterService provedení, naleznete v dokumentaci reference ITypeDescriptorFilterService třídy.

Viz také

Úkoly

Jak: upravit atributy, události a vlastnosti součásti v režimu návrhu

Koncepty

Základní třídy Designer

Návrhář slovesa

Jak: implementovat návrhář ovládacího prvku

Přehled popisovač typu

Další zdroje

Vlastní návrháři