http://blog.csdn.net/aofengdaxia/article/details/5924364

在.net开发中常常需要使用一些[]里面的特性描述,我发现对常用的几个知道大概的意思,但是却不甚清楚到底有多少个特性,都如何使用。所以今天查了下msdn,把他们一一总结下来。

这些特性(属性)在System.ComponentModel下面,凡是带有Attribute结尾的的类都是可以作为方括号里面使用的。我将它们一一摘录下来,并且写上了自己的理解。

AttributeUsageAttribute

用法:

  1. [AmbientValue(typeof(Color), "Empty")]
  2. [Category("Appearance")]
  3. [DefaultValue(typeof(Color), "White")]
  4. [Description("The color used for painting alert text.")]
  5. public Color AlertForeColor
  6. {
  7. get
  8. {
  9. if (this.alertForeColorValue == Color.Empty &&
  10. this.Parent != null)
  11. {
  12. return Parent.ForeColor;
  13. }
  14. return this.alertForeColorValue;
  15. }
  16. set
  17. {
  18. this.alertForeColorValue = value;
  19. }
  20. }

大概含义:

如果控件上的属性具有环境行为,则必须存在此特性。环境属性向其父级查询它们的值,例如 Control.Font 属性或 Control.BackColor 属性。

通常,可视化设器使用 AmbientValueAttribute 属性来决定为属性永久保存的值。这通常是一个使属性从另一个源获取其值的值。周围值的一个示例是 Color.Empty 作为 BackColor 属性的周围值。如果您在窗体上具有一个控件,并且该控件的 BackColor 属性被设置为与该窗体的BackColor 属性不同的颜色,则您可以通过将该控件的 BackColor 设置为 Color.Empty 来将该控件的 BackColor 属性重置为该窗体的颜色。

AttributeUsageAttribute

  1. [Category("Data")]
  2. [Description("Indicates the source of data for the control.")]
  3. [RefreshProperties(RefreshProperties.Repaint)]
  4. [AttributeProvider(typeof(IListSource))]
  5. public object DataSource
  6. {
  7. get
  8. {
  9. return this.dataGridView1.DataSource;
  10. }
  11. set
  12. {
  13. this.dataGridView1.DataSource = value;
  14. }
  15. }

大概含义:在 .NET Framework 对象模型中,有些情况下会有意将属性类型化为模糊的。例如,将 DataGridView.DataSource 属性类型化为object。之所以这样,是为了让此属性可以接受多种类型的输入。遗憾的是,这样做并未提供添加元数据以描述属性特性的通用方法。对于需要元数据的类型转换器、UI 类型编辑器和其他服务,.NET Framework 中的每个 DataSource 属性都需要具有相同的元数据。AttributeProviderAttribute 对此情况进行了补救。

此属性 (Attribute) 一旦被置于属性 (Property) 上,用于获得属性 (Property) 描述符的 MemberDescriptor.Attributes 集合的属性 (Attribute) 的规则就会有所不同。通常,属性 (Property) 描述符收集本地属性 (Attribute),然后再将其与来自属性 (Property) 类型的属性 (Attribute) 进行合并。在此情况下,将从 AttributeProviderAttribute 所返回的类型中而不是从实际属性 (Property) 类型获取属性 (Attribute)。此属性 (Attribute) 用在 DataGridView.DataSource 中,以使 DataGridView.DataSource 对象的特定类型指向IListSource,并且相应的元数据放在 IListSource 中,以启用数据绑定。在这种情况下,可以从外部轻松地向所有数据源添加元数据。

BindableAttribute

  1. [Bindable(true)]
  2. public int MyProperty {
  3. get {
  4. // Insert code here.
  5. return 0;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

大概含义:

如果已将 BindableAttribute 设置为 true 来标记属性,则应引发该属性的属性更改通知。这意味着,如果 Yes 属性 (Property) 为 Bindable,则支持双向数据绑定。如果 Bindable 是 No,则您仍可以绑定到该属性 (Property),但它不应该显示在默认的要绑定到的属性 (Property) 集中,因为它不一定引发属性 (Property) 更改通知。

BrowsableAttribute

  1. [Browsable(true)]
  2. public int MyProperty {
  3. get {
  4. // Insert code here.
  5. return 0;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

大概含义:

可视化设计器通常在“属性”窗口中显示没有可浏览属性 (Attribute) 的成员,或使用值 true 的 BrowsableAttribute 构造函数标记的成员。这些成员可以在设计时进行修改。使用值 false 的 BrowsableAttribute 构造函数标记的成员不适合在设计时进行编辑,因此,它们不会在可视化编辑器中显示。默认为 true

CategoryAttribute

  1. [Description("The image associated with the control"),Category("Appearance")]
  2. public Image MyImage {
  3. get {
  4. // Insert code here.
  5. return image1;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

一个 CategoryAttribute,它指示在一个设置为 Categorized 模式的 PropertyGrid 控件中列出属性 (Property) 或事件时,将关联的属性 (Property) 或事件与���关联的类别。如果没有对属性或事件应用 CategoryAttribute,则 PropertyGrid 将属性 (Property) 或事件与“杂项”类别关联。通过在 CategoryAttribute 的构造函数中指定类别的名称,可以为任何名称创建新的类别。

Category 属性 (Property) 指示该属性 (Attribute) 所代表的类别的名称。Category 属性 (Property) 还以透明方式对类别名称进行本地化。

给继承者的说明 如果使用类别名称而不是预定义的名称,并且想要本地化类别名称,则必须重写 GetLocalizedString 方法。此外,可以重写Category 属性 (Property) 以提供您自己的本地化逻辑。 CategoryAttribute 类定义下列通用类别:

 

类别

说明

Action

与可用操作相关的属性 (Property)。

Appearance

与实体的外观相关的属性 (Property)。

Behavior

与实体的行为相关的属性 (Property)。

Data

与数据和数据源管理相关的属性 (Property)。

Default

组合到默认类别中的属性 (Property)。

Design

仅在设计时可用的属性 (Property)。

DragDrop

与拖放操作相关的属性 (Property)。

Focus

与焦点相关的属性 (Property)。

Format

与格式设置相关的属性 (Property)。

Key

与键盘相关的属性 (Property)。

Layout

与布局相关的属性 (Property)。

Mouse

与鼠标相关的属性 (Property)。

WindowStyle

与顶级窗体的窗口样式相关的属性 (Property)。

DataObjectAttribute

  1. [DataObjectAttribute]
  2. public class NorthwindData
  3. {
  4. public NorthwindData() {}
  5. [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
  6. public static IEnumerable GetAllEmployees()
  7. {
  8. AccessDataSource ads = new AccessDataSource();
  9. ads.DataSourceMode = SqlDataSourceMode.DataReader;
  10. ads.DataFile = "~//App_Data//Northwind.mdb";
  11. ads.SelectCommand = "SELECT EmployeeID,FirstName,LastName FROM Employees";
  12. return ads.Select(DataSourceSelectArguments.Empty);
  13. }
  14. // Delete the Employee by ID.
  15. [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
  16. public void DeleteEmployeeByID(int employeeID)
  17. {
  18. throw new Exception("The value passed to the delete method is "
  19. + employeeID.ToString());
  20. }
  21. }

大概含义:

使用 DataObjectAttribute 属性可以将某一对象标识为适合由 ObjectDataSource 对象使用。设计时类(如 ObjectDataSourceDesigner类)使用 DataObjectAttribute 属性表示适合绑定到 ObjectDataSource 对象的对象。

更多的见:利用属性扩展元数据

DataObjectFieldAttribute 类

  1. public class NorthwindEmployee
  2. {
  3. public NorthwindEmployee() { }
  4. private int _employeeID;
  5. [DataObjectFieldAttribute(true, true, false)]
  6. public int EmployeeID
  7. {
  8. get { return _employeeID; }
  9. set { _employeeID = value; }
  10. }
  11. private string _firstName = String.Empty;
  12. [DataObjectFieldAttribute(false, false, true)]
  13. public string FirstName
  14. {
  15. get { return _firstName; }
  16. set { _firstName = value; }
  17. }
  18. private string _lastName = String.Empty;
  19. [DataObjectFieldAttribute(false, false, true)]
  20. public string LastName
  21. {
  22. get { return _lastName; }
  23. set { _lastName = value; }
  24. }
  25. }

大概含义:

使用 DataObjectFieldAttribute 属性可以提供有关基础数据架构的信息。设计时类(如 ObjectDataSourceDesigner 类)使用DataObjectAttribute 属性 (Attribute) 根据公开的架构在设计时设置属性 (Property)。

将 DataObjectFieldAttribute 属性应用于数据项对象的成员,这些对象由通过 DataObjectAttribute 属性进行标记的对象的 Select 方法返回。在下面的示例中,NorthwindData 类使用 DataObjectAttribute 属性进行标记,并从 GetAllEmployees 方法返回一个包含NorthwindEmployee 对象的 IEnumerable 对象。NorthwindEmployee 类中的字段使用 DataObjectFieldAttribute 属性进行标记,以指示它们表示基础数据源中的数据字段。

有关使用属性的更多信息,请参见 利用属性扩展元数据

DataObjectMethodAttribute 类

  1. [DataObjectAttribute]
  2. public class NorthwindData
  3. {
  4. public NorthwindData() {}
  5. [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
  6. public static IEnumerable GetAllEmployees()
  7. {
  8. AccessDataSource ads = new AccessDataSource();
  9. ads.DataSourceMode = SqlDataSourceMode.DataReader;
  10. ads.DataFile = "~//App_Data//Northwind.mdb";
  11. ads.SelectCommand = "SELECT EmployeeID,FirstName,LastName FROM Employees";
  12. return ads.Select(DataSourceSelectArguments.Empty);
  13. }
  14. // Delete the Employee by ID.
  15. [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
  16. public void DeleteEmployeeByID(int employeeID)
  17. {
  18. throw new Exception("The value passed to the delete method is "
  19. + employeeID.ToString());
  20. }
  21. }

一般含义:

可以使用 DataObjectMethodAttribute 标识以 DataObjectAttribute 属性进行标记的��型上的数据操作方法,以便调用方可以通过使用反射更容易地标识这些方法。在将 DataObjectMethodAttribute 属性应用于某一方法时,该属性描述该方法所执行的操作类型并指示该方法是否是某一类型的默认数据操作方法。组件(如 ObjectDataSource 控件和 ObjectDataSourceDesigner 类)检查此属性值(如果提供的话)以帮助确定在运行时调用哪一数据方法。

DefaultBindingPropertyAttribute 类

  1. // This control demonstrates a simple logging capability.
  2. [ComplexBindingProperties("DataSource", "DataMember")]
  3. [DefaultBindingProperty("TitleText")]
  4. [DefaultEvent("ThresholdExceeded")]
  5. [DefaultProperty("Threshold")]
  6. [HelpKeywordAttribute(typeof(UserControl))]
  7. [ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design")]
  8. public class AttributesDemoControl : UserControl
  9. {

DefaultBindingPropertyAttribute 是在类级别指定的。它可以被继承,但不允许在同一类中存在多个属性。

有关使用属性的更多信息,请参见 利用属性扩展元数据

 
DefaultEventAttribute 类
  1. [DefaultEvent("CollectionChanged")]
  2. public class MyCollection : BaseCollection {
  3. private CollectionChangeEventHandler onCollectionChanged;
  4. public event CollectionChangeEventHandler CollectionChanged {
  5. add {
  6. onCollectionChanged += value;
  7. }
  8. remove {
  9. onCollectionChanged -= value;
  10. }
  11. }
  12. // Insert additional code.
  13. }

大概含义:属性来获取默认事件的名称。

DefaultPropertyAttribute 类

  1. [DefaultProperty("MyProperty")]
  2. public class MyControl : Control {
  3. public int MyProperty {
  4. get {
  5. // Insert code here.
  6. return 0;
  7. }
  8. set {
  9. // Insert code here.
  10. }
  11. }
  12. // Insert any additional code.
  13. }

大概含义:

使用 Name 属性来获取默认属性的名称。

DefaultValueAttribute 类

  1. private bool myVal=false;
  2. [DefaultValue(false)]
  3. public bool MyProperty {
  4. get {
  5. return myVal;
  6. }
  7. set {
  8. myVal=value;
  9. }
  10. }

大概含义:

可以使用任何值创建 DefaultValueAttribute。成员的默认值通常是其初始值。可视化设计器可以使用默认值重置成员的值。代码生成器也可使用默认值确定是否为成员生成代码。

有关更多信息,请参见 属性 (Attribute) 概述 和 利用属性扩展元数据

DescriptionAttribute 类

  1. [Description("The image associated with the control"),Category("Appearance")]
  2. public Image MyImage {
  3. get {
  4. // Insert code here.
  5. return image1;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

大概含义:

可视化设计器在引用组件成员时可以显示指定的说明,如在“属性”窗口中。调��� Description 访问该属性 (Attribute) 的值。

有关更多信息,请参见 属性 (Attribute) 概述 和 利用属性扩展元数据

DesignerAttribute 类

  1. [Designer("System.Windows.Forms.Design.DocumentDesigner, System.Windows.Forms.Design.DLL",
  2. typeof(IRootDesigner)),
  3. DesignerCategory("Form")]
  4. public class MyForm : ContainerControl {
  5. // Insert code here.
  6. }

大概含义:

用于设计时服务的类必须实现 IDesigner 接口。

使用 DesignerBaseTypeName 属性查找设计器的基类。使用 DesignerTypeName 属性获取与该成员关联的设计器的类型名称。

DesignerCategoryAttribute 类

  1. [Designer("System.Windows.Forms.Design.DocumentDesigner, System.Windows.Forms.Design",
  2. typeof(IRootDesigner)),
  3. DesignerCategory("Form")]
  4. public class MyForm : ContainerControl {
  5. // Insert code here.
  6. }

大概用法:

可视化设计器可以使用设计器类别通知开发环境将要实现的设计器类型。如果没有为某个类提供任何设计器类别,开发环境可能允许设计此类,也可能不允许。可以创建任何名称的类别。

当用此属性标记类时,它被设置为常数成员。当要在代码中检查此属性的值时,必须指定常数成员。下表中的“说明”列列出了将每个值设置为的常数成员。

DesignOnlyAttribute 类

  1. [DesignOnly(true)]
  2. public CultureInfo GetLanguage {
  3. get {
  4. // Insert code here.
  5. return myCultureInfo;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

通过将 DesignOnlyAttribute 设置为 true 进行标记的成员只能在设计时进行设置。通常,这些属性 (Property) 只能在设计时存在,并且不对应于运行时对象上的���个实际属性 (Property)。

没有属性 (Attribute) 或通过将 DesignOnlyAttribute 设置为 false 进行标记的成员可以在运行时进行设置。默认为 false

DesignOnlyAttribute 设置为 true 的属性的值被序列化为 .resx 文件而不是 InitializeComponent 方法。

DesignTimeVisibleAttribute 类

DesignTimeVisibleAttribute 是提供给设计器的提示。对于具有 UI 的组件,设计器将忽略此属性。它仅应用于类。

如果有接受子组件的控件,则 DesignTimeVisibleAttribute 非常有用。例如,System.Windows.Forms.TreeView 控件的节点项不应显示在组件栏中,这是因为节点项是由 System.Windows.Forms.TreeView 控件绘制的。

DisplayNameAttribute 类

  1. [Description("Demonstrates DisplayNameAttribute.")]
  2. [DisplayName("RenamedProperty")]
  3. public bool MisnamedProperty
  4. {
  5. get
  6. {
  7. return true;
  8. }
  9. }

默认值为属性名或事件名。GetSortedActionItems 的默认实现使用反射搜索公共属性以及不采用任何参数的公共 void 方法。GetSortedActionItems 搜索每个属性和方法的 DisplayNameAttribute,如果找到对应的字符串,将使用该字符串,而不使用属性名或方法名。

EditorBrowsableAttribute 类

  1. int ageval;
  2. [EditorBrowsable(EditorBrowsableState.Never)]
  3. public int Age
  4. {
  5. get { return ageval; }
  6. set
  7. {
  8. if (!ageval.Equals(value))
  9. {
  10. ageval = value;
  11. }
  12. }
  13. }

您可以在可视化设计器或文本编辑器中使用该类来确定用户可见的内容。例如,Visual Studio 中的“IntelliSense”引擎使用此属性来确定是否显示方法或属性。

ExtenderProvidedPropertyAttribute 类

定由扩展程序提供程序提供的属性。无法继承此类。

ImmutableObjectAttribute 类

指定对象没有可以被编辑的子属性。无法继承此类。

InheritanceAttribute 类

指示是否已从基类继承与此属性关联的组件。无法继承此类。

InitializationEventAttribute 类

注意:此类在 .NET Framework 2.0 版中是新增的。

指定在初始化时引发的事件。无法继承此类。

InstallerTypeAttribute 类

为安装组件的类型指定安装程序。

LicenseProviderAttribute 类

  1. [LicenseProvider(typeof(LicFileLicenseProvider))]
  2. public class MyControl : Control {
  3. // Insert code here.
  4. protected override void Dispose(bool disposing) {
  5. /* All components must dispose of the licenses they grant.
  6. * Insert code here to dispose of the license. */
  7. }
  8. }

当创建要授权的某组件时,必须通过用 LicenseProviderAttribute 标记该组件来指定 LicenseProvider

使用 LicenseProvider 属性获取 LicenseProvider 的 Type

ListBindableAttribute 类

指定列表可被用作数据源。可视化设计器应该使用该属性来确定是否在数据绑定选择器中显示特定的列表。无法继承此类。

LookupBindingPropertiesAttribute 类

  1. [LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "LookupMember")]
  2. public class DemoControl : Control { … }

LookupBindingPropertiesAttribute 用于指定基于查找的绑定所使用的属性,特别是 ListBox 和 ComboBox 控件。

LookupBindingPropertiesAttribute 是在类级别指定的。该类可以被继承,但不允许在同一类中存在多个属性

MergablePropertyAttribute 类

  1. [MergableProperty(true)]
  2. public int MyProperty {
  3. get {
  4. // Insert code here.
  5. return 0;
  6. }
  7. set {
  8. // Insert code here.
  9. }
  10. }

通过将 MergablePropertyAttribute 设置为 true 进行标记的属性 (Property) 可以与“属性”窗口中属于其他对象的属性 (Property) 组合。通过将 MergablePropertyAttribute 设置为 false 进行标记的属性 (Property) 必须单独显示。默认为 true

NotifyParentPropertyAttribute 类

指示当此属性应用到的属性的值被修改时将通知父属性。无法继承此类。

ParenthesizePropertyNameAttribute 类

指示关联属性的名称在“属性”窗口中显示时是否带有括号。无法继承此类。

PasswordPropertyTextAttribute 类

  1. // This property exists only to demonstrate the
  2. // PasswordPropertyText attribute. When this control
  3. // is attached to a PropertyGrid control, the returned
  4. // string will be displayed with obscuring characters
  5. // such as asterisks. This property has no other effect.
  6. [Category("Security")]
  7. [Description("Demonstrates PasswordPropertyTextAttribute.")]
  8. [PasswordPropertyText(true)]
  9. public string Password
  10. {
  11. get
  12. {
  13. return "This is a demo password.";
  14. }
  15. }

如果将 PasswordPropertyTextAttribute 属性 (Attribute) 置于属性 (Property) 或对象之上,其属性 (Property) 窗口中的文本表示形式将显示为点或星号,以指示密码字段。

PropertyTabAttribute 类

  1. using System;
  2. using System.ComponentModel;
  3. using System.ComponentModel.Design;
  4. using System.Drawing;
  5. using System.IO;
  6. using System.Reflection;
  7. using System.Runtime.Serialization;
  8. using System.Runtime.Serialization.Formatters.Binary;
  9. using System.Windows.Forms;
  10. using System.Windows.Forms.Design;
  11. namespace TypeCategoryTabExample
  12. {
  13. // This component adds a TypeCategoryTab to the propery browser
  14. // that is available for any components in the current design mode document.
  15. [PropertyTabAttribute(typeof(TypeCategoryTab), PropertyTabScope.Document)]
  16. public class TypeCategoryTabComponent : System.ComponentModel.Component
  17. {
  18. public TypeCategoryTabComponent()
  19. {
  20. }
  21. }
  22. // A TypeCategoryTab property tab lists properties by the
  23. // category of the type of each property.
  24. [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
  25. public class TypeCategoryTab : PropertyTab
  26. {
  27. [BrowsableAttribute(true)]
  28. // This string contains a Base-64 encoded and serialized example property tab image.
  29. private string img = "AAEAAAD/////AQAAAAAAAAAMAgAAAFRTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj0xLjAuMzMwMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJhd2luZy5CaXRtYXABAAAABERhdGEHAgIAAAAJAwAAAA8DAAAA9gAAAAJCTfYAAAAAAAAANgAAACgAAAAIAAAACAAAAAEAGAAAAAAAAAAAAMQOAADEDgAAAAAAAAAAAAD///////////////////////////////////9ZgABZgADzPz/zPz/zPz9AgP//////////gAD/gAD/AAD/AAD/AACKyub///////+AAACAAAAAAP8AAP8AAP9AgP////////9ZgABZgABz13hz13hz13hAgP//////////gAD/gACA/wCA/wCA/wAA//////////+AAACAAAAAAP8AAP8AAP9AgP////////////////////////////////////8L";
  30. public TypeCategoryTab()
  31. {
  32. }
  33. // Returns the properties of the specified component extended with
  34. // a CategoryAttribute reflecting the name of the type of the property.
  35. public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, System.Attribute[] attributes)
  36. {
  37. PropertyDescriptorCollection props;
  38. if( attributes == null )
  39. props = TypeDescriptor.GetProperties(component);
  40. else
  41. props = TypeDescriptor.GetProperties(component, attributes);
  42. PropertyDescriptor[] propArray = new PropertyDescriptor[props.Count];
  43. for(int i=0; i<props.Count; i++)
  44. {
  45. // Create a new PropertyDescriptor from the old one, with
  46. // a CategoryAttribute matching the name of the type.
  47. propArray[i] = TypeDescriptor.CreateProperty(props[i].ComponentType, props[i], new CategoryAttribute(props[i].PropertyType.Name));
  48. }
  49. return new PropertyDescriptorCollection( propArray );
  50. }
  51. public override System.ComponentModel.PropertyDescriptorCollection GetProperties(object component)
  52. {
  53. return this.GetProperties(component, null);
  54. }
  55. // Provides the name for the property tab.
  56. public override string TabName
  57. {
  58. get
  59. {
  60. return "Properties by Type";
  61. }
  62. }
  63. // Provides an image for the property tab.
  64. public override System.Drawing.Bitmap Bitmap
  65. {
  66. get
  67. {
  68. Bitmap bmp = new Bitmap(DeserializeFromBase64Text(img));
  69. return bmp;
  70. }
  71. }
  72. // This method can be used to retrieve an Image from a block of Base64-encoded text.
  73. private Image DeserializeFromBase64Text(string text)
  74. {
  75. Image img = null;
  76. byte[] memBytes = Convert.FromBase64String(text);
  77. IFormatter formatter = new BinaryFormatter();
  78. MemoryStream stream = new MemoryStream(memBytes);
  79. img = (Image)formatter.Deserialize(stream);
  80. stream.Close();
  81. return img;
  82. }
  83. }
  84. }

属性选项卡可以添加附加的属性选项卡以公开其默认属性集之外的属性信息。

ProvidePropertyAttribute 类

  1. ProvideProperty("MyProperty", typeof(Control))]
  2. public class MyClass : IExtenderProvider {
  3. protected CultureInfo ciMine = null;
  4. // Provides the Get portion of MyProperty.
  5. public CultureInfo GetMyProperty(Control myControl) {
  6. // Insert code here.
  7. return ciMine;
  8. }
  9. // Provides the Set portion of MyProperty.
  10. public void SetMyProperty(Control myControl, string value) {
  11. // Insert code here.
  12. }
  13. /* When you inherit from IExtenderProvider, you must implement the
  14. * CanExtend method. */
  15. public bool CanExtend(Object target) {
  16. return(target is Control);
  17. }
  18. // Insert additional code here.
  19. }

在用此特性标记类时,即通知代码生成器使用所提供的名称创建扩展程序属性。所标记的类必须实现 IExtenderProvider。因此,新的属性可以由容器中的其他��件使用。

在所标记的类内,必须实现 Get<name> 和 Set<name> 方法。例如,如果用 [ProvideProperty("PropertyName")] 标记了某个类,则必须实现 GetPropertyName 和 SetPropertyName 方法。若要指定新属性将是扩展程序属性,则必须从 IExtenderProvider 实现,还必须实现CanExtend 方法。

ReadOnlyAttribute 类

  1. [ReadOnly(true)]
  2. public int MyProperty {
  3. get {
  4. // Insert code here.
  5. return 0;
  6. }
  7. }

定该属性 (Attribute) 所绑定到的属性 (Property) 在设计时是只读属性 (Property) 还是读/写属性 (Property)。无法继承此类

RefreshPropertiesAttribute 类

  1. [Category("Data")]
  2. [Description("Indicates the source of data for the control.")]
  3. [RefreshProperties(RefreshProperties.Repaint)]
  4. [AttributeProvider(typeof(IListSource))]
  5. public object DataSource
  6. {
  7. get
  8. {
  9. return this.dataGridView1.DataSource;
  10. }
  11. set
  12. {
  13. this.dataGridView1.DataSource = value;
  14. }
  15. }

RefreshPropertiesAttribute 指示在刷新 PropertyGrid 控件时要使用的刷新模式的类型

RunInstallerAttribute 类

  1. [RunInstallerAttribute(true)]
  2. public class MyProjectInstaller : Installer {
  3. // Insert code here.
  4. }

如果通过将 RunInstallerAttribute 设置为 true 标记从 Installer 继承的类,则在安装程序集时将调用 Visual Studio 自定义操作安装程序或 InstallUtil.exe。通过将 RunInstallerAttribute 设置为 false 标记的成员不会调用安装程序。默认为 false

SettingsBindableAttribute 类

指定何时可将组件属性绑定到应用程序设置。

ToolboxItemAttribute 类

ToolboxItemAttribute 类提供了一种为 ToolboxItem 指定属性的方式。除了 Attribute 类提供的内容之外,此对象类还存储工具箱项的类型。

[ToolboxItem(typeof(MyToolboxItem))]
public class UserControl1 : UserControl

ToolboxItemFilterAttribute 类

  1. using System.Collections;
  2. using System.ComponentModel;
  3. using System.ComponentModel.Design;
  4. using System.Diagnostics;
  5. using System.Drawing;
  6. using System.Drawing.Design;
  7. using System.Windows.Forms;
  8. using System.Windows.Forms.Design;
  9. // This example contains an IRootDesigner that implements the IToolboxUser interface.
  10. // This example demonstrates how to enable the GetToolSupported method of an IToolboxUser
  11. // designer in order to disable specific toolbox items, and how to respond to the
  12. // invocation of a ToolboxItem in the ToolPicked method of an IToolboxUser implementation.
  13. namespace IToolboxUserExample
  14. {
  15. // This example component class demonstrates the associated IRootDesigner which
  16. // implements the IToolboxUser interface. When designer view is invoked, Visual
  17. // Studio .NET attempts to display a design mode view for the class at the top
  18. // of a code file. This can sometimes fail when the class is one of multiple types
  19. // in a code file, and has a DesignerAttribute associating it with an IRootDesigner.
  20. // Placing a derived class at the top of the code file solves this problem. A
  21. // derived class is not typically needed for this reason, except that placing the
  22. // RootDesignedComponent class in another file is not a simple solution for a code
  23. // example that is packaged in one segment of code.
  24. public class RootViewSampleComponent : RootDesignedComponent
  25. {
  26. }
  27. // The following attribute associates the SampleRootDesigner with this example component.
  28. [DesignerAttribute(typeof(SampleRootDesigner), typeof(IRootDesigner))]
  29. public class RootDesignedComponent : System.Windows.Forms.Control
  30. {
  31. }
  32. // This example IRootDesigner implements the IToolboxUser interface and provides a
  33. // Windows Forms view technology view for its associated component using an internal
  34. // Control type.
  35. // The following ToolboxItemFilterAttribute enables the GetToolSupported method of this
  36. // IToolboxUser designer to be queried to check for whether to enable or disable all
  37. // ToolboxItems which create any components whose type name begins with "System.Windows.Forms".
  38. [ToolboxItemFilterAttribute("System.Windows.Forms", ToolboxItemFilterType.Custom)]
  39. [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
  40. public class SampleRootDesigner : ParentControlDesigner, IRootDesigner, IToolboxUser
  41. {
  42. // This field is a custom Control type named RootDesignerView. This field references
  43. // a control that is shown in the design mode document window.
  44. private RootDesignerView view;
  45. // This string array contains type names of components that should not be added to
  46. // the component managed by this designer from the Toolbox.  Any ToolboxItems whose
  47. // type name matches a type name in this array will be marked disabled according to
  48. // the signal returned by the IToolboxUser.GetToolSupported method of this designer.
  49. private string[] blockedTypeNames =
  50. {
  51. "System.Windows.Forms.ListBox",
  52. "System.Windows.Forms.GroupBox"
  53. };
  54. // IRootDesigner.SupportedTechnologies is a required override for an IRootDesigner.
  55. // This designer provides a display using the Windows Forms view technology.
  56. ViewTechnology[] IRootDesigner.SupportedTechnologies
  57. {
  58. get { return new ViewTechnology[] {ViewTechnology.Default}; }
  59. }
  60. // This method returns an object that provides the view for this root designer.
  61. object IRootDesigner.GetView(ViewTechnology technology)
  62. {
  63. // If the design environment requests a view technology other than Windows
  64. // Forms, this method throws an Argument Exception.
  65. if (technology != ViewTechnology.Default)
  66. throw new ArgumentException("An unsupported view technology was requested",
  67. "Unsupported view technology.");
  68. // Creates the view object if it has not yet been initialized.
  69. if (view == null)
  70. view = new RootDesignerView(this);
  71. return view;
  72. }
  73. // This method can signal whether to enable or disable the specified
  74. // ToolboxItem when the component associated with this designer is selected.
  75. bool IToolboxUser.GetToolSupported(ToolboxItem tool)
  76. {
  77. // Search the blocked type names array for the type name of the tool
  78. // for which support for is being tested. Return false to indicate the
  79. // tool should be disabled when the associated component is selected.
  80. for( int i=0; i<blockedTypeNames.Length; i++ )
  81. if( tool.TypeName == blockedTypeNames[i] )
  82. return false;
  83. // Return true to indicate support for the tool, if the type name of the
  84. // tool is not located in the blockedTypeNames string array.
  85. return true;
  86. }
  87. // This method can perform behavior when the specified tool has been invoked.
  88. // Invocation of a ToolboxItem typically creates a component or components,
  89. // and adds any created components to the associated component.
  90. void IToolboxUser.ToolPicked(ToolboxItem tool)
  91. {
  92. }
  93. // This control provides a Windows Forms view technology view object that
  94. // provides a display for the SampleRootDesigner.
  95. [DesignerAttribute(typeof(ParentControlDesigner), typeof(IDesigner))]
  96. internal class RootDesignerView : Control
  97. {
  98. // This field stores a reference to a designer.
  99. private IDesigner m_designer;
  100. public RootDesignerView(IDesigner designer)
  101. {
  102. // Perform basic control initialization.
  103. m_designer = designer;
  104. BackColor = Color.Blue;
  105. Font = new Font(Font.FontFamily.Name, 24.0f);
  106. }
  107. // This method is called to draw the view for the SampleRootDesigner.
  108. protected override void OnPaint(PaintEventArgs pe)
  109. {
  110. base.OnPaint(pe);
  111. // Draw the name of the component in large letters.
  112. pe.Graphics.DrawString(m_designer.Component.Site.Name, Font, Brushes.Yellow, ClientRectangle);
  113. }
  114. }
  115. }
  116. }

ToolboxItemFilterAttribute 提供一种机制,通过这种机制,可以将工具箱项标记为只能与具有匹配的属性或者代码的设���器一起使用,这些属性或者代码确定了该项在工具箱中应该启用还是禁用。

可以将 ToolboxItemFilterAttribute 应用到 ToolboxItem 以指示筛选器字符串和筛选器类型,以便指定何时启用或禁用项。还可以将ToolboxItemFilterAttribute 应用到设计器,以指示在工具箱中启用项的要求。这一类型的属性可以使用来表明,某个工具箱项只有在使用带匹配筛选器字符串的设计器时才能启用。筛选器的类型在 FilterType 属性中由 ToolboxItemFilterType 来指示,它指示是否使用筛选器字符串匹配以及如何使用,或者是否使用自定义代码来确定是否启用项。

TypeConverterAttribute 类

  1. [TypeConverter(typeof(MyClassConverter))]
  2. public class MyClass {
  3. // Insert code here.
  4. }

用于转换的类必须从 TypeConverter 继承。使用 ConverterTypeName 属性 (Property) 来获取为该属性 (Attribute) 所绑定到的对象提供数据转换的类名。

有关属性的更多信息,请参见 属性 (Attribute) 概述 和 利用属性扩展元数据。有关类型转换器的更多信息,请参见 TypeConverter 基类和 如何:实现类型转换器

TypeDescriptionProviderAttribute 类

此属性为开发人员提供了一种为其所编写的类提供自定义元数据的方法。此功能扩展了 TypeDescriptor 类中的静态类型信息功能,默认情况下,该类只从已编译的类的元数据中直接获得类型信息。

对我的博客感兴趣的,可以看看这篇:

http://blog.csdn.net/aofengdaxia/archive/2010/10/15/5944193.aspx

.net 控件开发常见的特性总结的更多相关文章

  1. MFC-[转]基于MFC的ActiveX控件开发

    作者:lidan | 出处:博客园 | 2012/3/13 16:10:34 | 阅读22次 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC ...

  2. 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用

    Dixon 原文  用ArcGIS Engine.VS .NET和Windows控件开发GIS应用     此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署 ...

  3. JavaScript日历控件开发 C# 读取 appconfig文件配置数据库连接字符串,和配置文件 List<T>.ForEach 调用异步方法的意外 ef 增加或者更新的习惯思维 asp.net core导入excel 一个二级联动

    JavaScript日历控件开发   概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果代码地址:https://github.com/aspwebc ...

  4. 【转载】基于MFC的ActiveX控件开发(3)

    原文:http://iysm.net/?p=122 3.事件 ActiveX 控件使用事件通知容器控件上发生了某些事情.事件的常见示例包括单击控件.使用键盘输入数据和控件状态更改.当发生这些操作时,控 ...

  5. 【转载】基于MFC的ActiveX控件开发(1)

    原文:http://iysm.net/?p=114 ActiveX 控件是基于组件对象模型 (COM) 的可重用软件组件,广泛应用于桌面及Web应用中.在VC下ActiveX控件的开发可以分为三种,一 ...

  6. wpf控件开发基础(3) -属性系统(2)

    原文:wpf控件开发基础(3) -属性系统(2) 上篇说明了属性存在的一系列问题. 属性默认值,可以保证属性的有效性. 属性验证有效性,可以对输入的属性进行校验 属性强制回调, 即不管属性有无发生变化 ...

  7. wpf控件开发基础(4) -属性系统(3)

    原文:wpf控件开发基础(4) -属性系统(3) 知识回顾 接上篇,上篇我们真正接触到了依赖属性的用法,以及依赖属性的属性元数据的用法,并且也实实在在地解决了之前第二篇提到的一系列问题.来回顾一下 属 ...

  8. wpf控件开发基础(5) -依赖属性实践

    原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...

  9. 浅谈Winform控件开发(一):使用GDI+美化基础窗口

    写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...

随机推荐

  1. Python 标准库中的装饰器

    题目描述 1.简单举例 Python 标准库中的装饰器 2.说说你用过的 Python 标准库中的装饰器 1. 首先,我们比较熟悉,也是比较常用的 Python 标准库提供的装饰器有:property ...

  2. 使用Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown

    新建一个spring boot的web项目,运行之后控制台输出“Unregistering JMX-exposed beans on shutdown”,tomcat也没有运行.寻找原因,看了下pom ...

  3. a标签的href为空的问题

    在表格里写一个a标签链接刷新表格的时候,没注意,把a标签的href设置为""空字符串,导致每次刷新表格之后会再刷新一次整体页面,找了很久都没发现问题出在哪里,最后无意之间,鼠标在一 ...

  4. TeamWork#3,Week5,Scrum Meeting 11.4

    今天我们进行了第一次Scrum Meeting,总结了最近一段时间的工作成果和经验教训,并分配了每个成员下一步的工作.网络爬虫对我们来说是一个难点,因为之前接触比较少,所以需要从头学起.我们参考了大量 ...

  5. 渐入OO课的深处,探索多线程的秘密——OO第二次博客总结

    一次又一次的挑战,一次又一次全新的知识,我来到了多线程的面前 第五次作业 1.度量分析 >第五次作业由于很大程度上调用的是前两次电梯的一些代码,所以存在的问题与前几次也十分相似.同时由于第一次使 ...

  6. 20145214 《网络对抗技术》 Web安全基础实践

    20145214 <网络对抗技术> Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的 ...

  7. 20162328蔡文琛week08

    学号 20162328 <程序设计与数据结构>第X周学习总结 教材学习内容总结 错误和异常代表不常见的或不正确处理的对象. 抛出异常时输出的消息提供了方法调用栈的轨迹. 每个catch子句 ...

  8. android--实现通过点击链接打开apk(应用图标在桌面消失)

    首先在AndroidManifest.xml的MAIN Activity下追加以下内容.(启动Activity时给予) ※必须添加项 <intent-filter> <action ...

  9. HDU 4745 Two Rabbits 区间dp_回文序列

    题目链接: http://blog.csdn.net/scnu_jiechao/article/details/11759333 Two Rabbits Time Limit: 10000/5000 ...

  10. Alpha版本冲刺(一)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内 ...