Atrybuty i pomoc techniczna podczas projektowania

Rozszerzenia wsparcia technicznego w czasie projektowania są zwykle implementowane w kodzie, który istnieje oddzielnie od kodu dla składnika.Różne atrybuty są używane do kojarzenia dostawcy pomocy technicznej w czasie projektowania z określonego typu lub pojedynczego członka typu.

Atrybuty do kojarzenia pomocy technicznej w czasie projektowania

A DesignerAttribute kojarzy Projektant z określonego typu.A TypeConverterAttribute kojarzy konwertera typu z typu lub członka typu.EditorAttribute Kojarzy edytora typu interfejsu użytkownika z typu lub członka typu.

Dostosowywanie składnika inicjowania atrybutów

Można określić wartość domyślną dla właściwości ustawić, gdy składnik jest ładowany w czasie projektowania, stosując DefaultValueAttribute do właściwości.A DefaultValueAttribute przesłonięcia wartość ustawiona przez kod inicjujący składnika w czasie projektowania, ale atrybut nie zastępują wartości ustawionej przez projektanta.

Dostosowywanie okna właściwości zachowania atrybutów

Można wskazać, czy właściwości lub zdarzenia powinny być wymienione w Właściwości okna, stosując BrowsableAttribute do niego.Można również zmodyfikować zestaw właściwości i zdarzeń są narażone na Właściwości okna w czasie projektowania przy użyciu projektanta, który implementuje IDesignerFilter interfejsu.Należy określić kategorię, w którym właściwości lub zdarzenia powinny być wymienione w Właściwości okna, stosując CategoryAttribute do właściwości lub zdarzenia.Można określić opis, który będzie wyświetlany dla właściwości lub zdarzeń w Właściwości okna, stosując DescriptionAttribute do właściwości lub zdarzenia.

Można określić, czy właściwość można ustawić tylko w czasie projektowania przez zastosowanie DesignOnlyAttribute do właściwości.Można określić, czy właściwość jest tylko do odczytu lub odczyt/zapis w czasie projektowania, stosując ReadOnlyAttribute do właściwości.

Można określić, czy właściwości powinny zostać wymienione z jego nazwy w nawiasach w Właściwości okna, stosując ParenthesizePropertyNameAttribute do właściwości z wartością true.

Można określić, czy właściwość, która ma zagnieżdżonego lub dziecka, właściwości powinny być powiadamiany, gdy wartość właściwości zagnieżdżonych zmienia się przy zastosowaniu NotifyParentPropertyAttribute do zagnieżdżonych właściwość, która powinna podnieść powiadomienia.

Można określić, czy powinny być odświeżane właściwości składnika, powinny być odświeżane żadnych właściwości lub widoku Projektant powinien odowieżany stosując RefreshPropertiesAttribute z odpowiedniego RefreshProperties wartości do właściwości lub zdarzenia.

Atrybuty dostosowywanie zachowania serializacji czasu projektowania

Można określić, czy wartości właściwości są szeregowane lub czy są szeregowane wartości właściwości kolekcji, stosując DesignerSerializationVisibilityAttribute z odpowiedniego DesignerSerializationVisibility wyliczenia wartości do właściwości.Istnieje szeroka Obsługa tego zadania w programie Visual Studio.

Można określić, że typ jest możliwy do serializacji, stosując SerializableAttribute do typu.Serializacji niestandardowej można zapewnić przez zaimplementowanie ISerializable interfejsu lub dostarczanie serializatora niestandardowego.Aby uzyskać więcej informacji na temat serializacji, zobacz Serializacja w programie .NET Framework.

Aby uzyskać więcej informacji na temat najczęściej używanych atrybutów w czasie projektowania, zobacz Atrybuty czasu projektowania dotyczące składników.

Stosowanie atrybutów

Atrybuty w czasie projektowania są stosowane do właściwości, zdarzenia, klas i nawet do zespołów.Poniższy przykład kodu pokazuje atrybuty klasy, a następnie właściwości i zdarzeń.

' The attribute is the element in angle brackets, and the parameters 
' in the attribute syntax are arguments of the constructor 
' of the attribute class.
' 
' Attributes applied at the class level.
<DefaultEvent("ValueChanged"), _
DefaultProperty("Number")> _
Public Class MyControl
   Inherits Control   
   ...
   ' Attribute applied to a property.
   <DefaultValue(False)> _
   Public Shadows ReadOnly Property TabStop() As Boolean
      ...
   End Property
   
   ' Attribute applied to a property.
   <CategoryAttribute("Data")> _
   Public ReadOnly Property Number() As Integer
      ...
   End Property 
   
   ' Attribute applied to an event.
   <Description("Raised when the Value displayed changes.")>  _
   Public Event ValueChanged As EventHandler
   ...
End Class
// The attribute is the element in brackets, and the parameters in 
// the attribute syntax are arguments of the constructor 
// of the attribute class.
// 
// Attributes applied at the class level.
[DefaultEvent("ValueChanged")]
[DefaultProperty("Number")]
public class MyControl : Control {
   ...
   // Attribute applied to a property.
   [DefaultValue(false)]
   public new bool TabStop {...
   }

   // Attribute applied to a property.
   [CategoryAttribute("Data")]
   public int Number {...}

   // Attribute applied to an event.
   [Description("Raised when the Value displayed changes.")]
   public event EventHandler ValueChanged;
}

Przez Konwencję, noszą nazwy atrybutu klasy Nazwa_atrybutuatrybut.System.ComponentModel Nazw zawiera wiele klas atrybutu podstawowego.

Atrybuty i dziedziczenie czasu projektowania

Gdy składnik lub kontroli są pochodzić od podstawowego składnika, który ma atrybuty w czasie projektowania, składnik dziedziczy funkcje projektowania klasy podstawowej.Podstawowe funkcje jest odpowiednie dla Twoich potrzeb, nie trzeba ponownie zastosować atrybuty.Jednakże można zastąpić atrybuty tego samego typu lub zastosować dodatkowe atrybuty do pochodnych składnika.Następujący fragment kodu pokazuje formant niestandardowy, który zastępuje Text właściwość dziedziczona z Control nadrzędnym BrowsableAttribute atrybut stosowane w klasie podstawowej.

Public Class MyControl
   Inherits Control
   ' The base class has [Browsable(true)] applied to the Text property.
   <Browsable(False)>  _
   Public Overrides Property [Text]() As String
      ...
   End Property 
   ...
End Class
public class MyControl : Control {
// The base class has [Browsable(true)] applied to the Text property.
[Browsable(false)]
 public override string Text {...}
...
}

Stosując konwerter typu, edytor typu interfejsu użytkownika lub projektanta atrybutu

Aby skojarzyć dostawcy pomocy technicznej w czasie projektowania z typu lub typu Członkowskiego, stosuje się odpowiedni typ atrybutu w wierszu powyżej klasy zgłoszenia lub deklaracji członka.Następujący kod pokazuje przykład TypeConverterAttribute stosowany do typu.

<TypeConverter(GetType(MyColorConverter)), _
Editor(GetType(MyColorEditor), GetType(UITypeEditor))> _
Structure MyColor
   ...
End Structure
[ TypeConverter(typeof(MyColorConverter))]
[ Editor(typeof(MyColorEditor), typeof(UITypeEditor))] 
struct MyColor {...}

Jeśli typ właściwości nie ma typ konwertera lub edytorze typu interfejsu użytkownika skojarzony z nim, lub jeśli chcesz zastąpić domyślny typ konwertera lub edytora typu interfejsu użytkownika, skojarzone z typem właściwości atrybutu można zastosować do samej właściwości.Aby skojarzyć typ konwertera z właściwością, stosuje się TypeConverterAttribute do deklaracji właściwości, jak pokazano w poniższym przykładzie kodu.

<TypeConverter(GetType(PointConverter))> _
Public Property MyLocation() As Point
   ...
End Property       
[ TypeConverter(typeof(PointConverter))]
        public Point MyLocation {...}  

Aby skojarzyć edytora typu interfejsu użytkownika z właściwością, stosuje się EditorAttribute do właściwości, jak pokazano w poniższym przykładzie kodu.

<Editor(GetType(FlashTrackBarDarkenByEditor), _
GetType(UITypeEditor))>  _
Public Property DarkenBy() As Byte
   ...
End Property
[ Editor(typeof(FlashTrackBarDarkenByEditor), typeof(UITypeEditor))]
        public byte DarkenBy {...}

Projektant może być skojarzony z typem, ale nie właściwość.Aby skojarzyć Projektant z typem, stosuje się DesignerAttribute bezpośrednio powyżej deklarację klasy, jak pokazano w poniższym przykładzie kodu.

<Designer(GetType(HelpLabel.HelpLabelDesigner))> _
Public Class HelpLabel
   Inherits System.Windows.Forms.Control
   Implements System.ComponentModel.IExtenderProvider
   ...
End Class
    [Designer(typeof(HelpLabel.HelpLabelDesigner))]
    public class HelpLabel : System.Windows.Forms.Control, System.ComponentModel.IExtenderProvider {...}

[!UWAGA]

W powyższych przykładach konstruktory dla TypeConverterAttribute,EditorAttribute, i DesignerAttribute zaakceptować klas Type obiektów, jak ich argumentów.Ten formularz Konstruktor dla tych atrybutów działa, jeśli typem jest w tym samym zestawie jako klasy czasu projektowania.Jeśli klasy czasu projektowania są w innym zestawie, a następnie innej formie Konstruktor atrybutu (nazywane kwalifikowana zestawu format) jest potrzebny, jak pokazano w poniższym przykładzie kodu.

<Designer("System.Windows.Forms.Design.DocumentDesigner, System.Design")>  _
Public Class MyForm
   Inherits Form
   ...
End Class
[Designer("System.Windows.Forms.Design.DocumentDesigner, System.Design")]
public class MyForm : Form {...}

Atrybut czas projektowania poziom zestawu

ASP.NET zapewnia atrybutu poziomu zestawu (TagPrefixAttribute), który umożliwia developer kontroli określić prefiks znacznika dla aplikacji ASP.NET kontroli.Prefiks znacznika wstrzykuje się automatycznie przez program Visual Studio w Register dyrektywa do celów kontroli, tak aby formant można deklaratywny używane na stronie z prefiksem znacznika z góry (<tagprefix:formantu runat = server / > ).

[!UWAGA]

TagPrefixAttribute Działa tylko w przypadku wizualnych projektantów.Jeśli autor stron ASP.NET stron przy użyciu edytora tekstów, takiego jak Notatnik, należy określić prefiks znacznika i obszaru nazw samodzielnie w Register dyrektywa do celów kontroli.

Poniższy przykład kodu pokazuje jak stosować TagPrefixAttribute.Pierwszy argument do konstruktora ten atrybut określa obszar nazw, a drugi Określa prefiks znacznika.

<assembly: TagPrefix("SimpleControls", "simple")>
Namespace SimpleControls
   <Designer("SimpleControl.Design.SimpleDesigner, SimpleControl")>  _
   Public Class SimpleControl
      Inherits System.Web.UI.WebControls.WebControl
      ...
   End Class 
End Namespace
[ assembly:TagPrefix("SimpleControls", "simple") ]
namespace SimpleControls {
    [
        Designer("SimpleControl.Design.SimpleDesigner, SimpleControl")
    ]
    public class SimpleControl : System.Web.UI.WebControls.WebControl {}
}

Zobacz też

Zadania

Porady: implementowanie konwertera typów

Porady: implementowanie edytora typów interfejsu

Porady: stosowanie atrybutów w formantach formularzy systemu Windows

Koncepcje

Atrybuty w formantach formularzy systemu Windows

Atrybuty czasu projektowania dotyczące składników

Inne zasoby

Rozszerzona pomoc techniczna czasu projektowania

Niestandardowi projektanci