在C#中使用属性控件添加属性窗口

转自原文 在C#中使用属性控件添加属性窗口

第一步,创建在应用程序中将要展现的字段属性为public公有属性。其中,所有的属性必须有get和set的方法(如果不设置get方法,则要显示的属性不会显示在属性控件中)。为了设置相关的属性,必须设置下面的一些关于属性控件的属性值,如下表所示:

属性值 含义
CategoryAttribute 该属性对在Property控件中的属性按字母顺序进行归类
DescriptionAttribute 其值为对每个属性的具体文字描述,将会显示在property控件的底部
BrowsableAttribute 该值为是否在property控件中显示或者隐藏某个属性
ReadOnlyAttribute 该值为某个属性值是否在property控件中只读
DefaultValueAttribute 每个属性的默认值

  接下来,我们创建一个用户类,并且使用属性控件,使得可以在属性控件框中改变其值。我们先引入相关的命名空间:

using System.ComponentModel;

  之后,创建相关的类,设置有关的属性,代码如下:


/// Customer class to be displayed in the property grid

/// </summary>

/// [DefaultPropertyAttribute("Name")]

public class Customer
{
 private string _name;
 private int _age;
 private DateTime _dateOfBirth;
 private string _SSN;
 private string _address;
 private string _email;
 private bool _frequentBuyer;
 [CategoryAttribute("ID Settings"), DescriptionAttribute("Name of the customer")]   

public string Name
 {
  get
  {
   return _name;
  }
  set
  {
   _name = value;
  }
 }
 [CategoryAttribute("ID Settings"), DescriptionAttribute("Social Security Number of the customer")]

 public string SSN
 {
  get
  {
   return _SSN;
  }
  set
  {
   _SSN = value;
  }
 }
 [CategoryAttribute("ID Settings"), DescriptionAttribute("Address of the customer")]
 public string Address
 {
  get
  {
   return _address;
  }
  set
  {
   _address = value;
  }
 }
 [CategoryAttribute("ID Settings"), DescriptionAttribute("Date of Birth of the Customer (optional)")]
 public DateTime DateOfBirth
 {
  get { return _dateOfBirth; }
  set { _dateOfBirth = value; }
 }
 [CategoryAttribute("ID Settings"), DescriptionAttribute("Age of the customer")]
 public int Age
 {
  get { return _age; }
  set { _age = value; }
 }
 [CategoryAttribute("Marketting
Settings"), DescriptionAttribute("If the customer has bought more than
10 times, this is set to true")]
 public bool FrequentBuyer
 {
  get { return _frequentBuyer; }
  set { _frequentBuyer = value; }
 }
 [CategoryAttribute("Marketting Settings"), DescriptionAttribute("Most current e-mail of the customer")]
 public string Email
 {
  get { return _email; }
  set { _email = value; }
 }
 public Customer() { }
}

  可以看到,在上面的代码中,我们对customer类中的属性进行了设置,如姓名,出生日期,地址等。
接着,我们要为创建的customer类创建一个实例,并且将其与属性控件绑定。属性控件会自动根据类中对属性的相关设置,从而在界面中显示有关的属性,并且还可以进行编辑,比如,可以对生日属性进行修改,修改时会弹出日历控件框,十分方便。代码如下:

private void Form1_Load(object sender, System.EventArgs e)
{
//创建bill对象,实例化CUSTOMER类
Customer bill = new Customer();
//赋值给属性
bill.Age = 50;
bill.Address = " 114 Maple Drive ";
bill.DateOfBirth = Convert.ToDateTime(" 9/14/78");
bill.SSN = "123-345-3566";
bill.Email = “[email protected]”
bill.Name = "Bill Smith";
//将对象绑定到property控件中
propertyGrid1.SelectedObject = bill;
}

  最后,运行程序,我们就得到了本文一开始图示的结果了。再来回顾下该程序,其中我们使用了CatrgoryAttribute属性,定义了id

settings和MarketSettings,它们在属性控件中以分类的形式出现(注意它们前有个“+”号,点击可以展开看到其子属性)。同时,我们每当选择一个属性时,在属性控件框的下部,会同时显示该属性的相关描述。

  Property属性控件还有很多优点,本文只是对其做了简单介绍,希望能给读者启发。

时间: 2024-10-17 14:12:04

在C#中使用属性控件添加属性窗口的相关文章

repeater中后台动态为控件添加属性

在此贴出repeater中的ItemDataBound事件中的代码: private void ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)//**对每一行操作,两种枚举必须都要进行判断 { TextBox tb = e.Item.FindCont

Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制

做这个功能是因为开发项目的时候,由于后台接口的一些参数的值的长度有要求,不能超过多少个字符,所以在编辑框中输入的字符是要有限制的. 下面就来看一下demo的实现过程: 首先,在xml控件中放置一个EditText控件,然后初始化该控件并对该控件添加文本监听.xml自己简单的设计一下,代码较为简单,直接上代码: package com.example.edittext; import android.app.Activity; import android.os.Bundle; import an

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加

Xcode UIView 中的Button 控件的属性和基本用法

  //第一种创建UIButton的方法 //initWhitFrame: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(110, 100, 100, 30)]; button.backgroundColor = [UIColor redColor]; button.titleLabel.font = [UIFont systemFontOfSize:19.0];//设置按钮的文字大小 button.contentHor

android项目自定义组合控件添加属性

首先要在values文件下新建立一个文件arrts.xml,这个文件就是用来说明键名称是做什么的,和值的类型 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="SeetingView"> <attr name="up" format="string" /> &

vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题

此文档解决以下问题: 1.在.cs文件中如何访问html控件? 在html控件中添加属性runat="server"即可 2.在html控件中,如何调用js函数? 在html控件中,利用事件绑定js函数即可,如 onclick="showJs()" 3.在.aspx文件的js中,如何调用.cs文件自定义的变量或方法? 使用<%=变量或方法%>调用即可 4.在.cs文件中如何调用js函数? 通过语句this.Page.ClientScript.Regist

【Android进阶】关于ListView中item与控件抢夺焦点的那些事

在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢? 我们以item存在一个Button控件为例 首先,加入我们不设置任何关于焦点的属性,比如focus等,代码如下 @Override public

Android关于ListView中item与控件抢夺焦点的那些事

在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢? 我们以item存在一个Button控件为例 首先,加入我们不设置任何关于焦点的属性,比如focus等,代码如下 view sourceprint?

Android中常用控件及属性

在之前的博客为大家带来了很多关于Android和jsp的介绍,本篇将为大家带来,关于Andriod中常用控件及属性的使用方法,目的方便大家遗忘时,及时复习参考.好了废话不多讲,现在开始我们本篇内容的介绍. 1.控制应用显示的方向: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖直显示效果. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LA