NET 框架 PropertyGrid 控件

NET框架PropertyGrid控件是 Visual Studio .NET 属性浏览器的核心。PropertyGrid控件显示对象或类型的属性,并主要通过使用反射来检索项目的属性

首先创建 PropertyGrid 控件要使用 Visual Studio .NET 创建 PropertyGrid 控件,需要将该控件添加到工具箱中,因为默认情况下并不包含该控件。在 Tools(工具)菜单中,选择 Customize Toolbox(自定义工具箱)。在对话框中选择 Framework Components(框架组件)选项卡,然后选择 PropertyGrid。

PropertyGrid 包含以下部分:

·        属性

·        可展开属性

·        属性类别标题

·        属性说明

·        属性编辑器

·        属性选项卡

·        命令窗格(显示控件设计器提供的设计器操作)

PropertyGrid的外观特征

·         PropertyGrid 的许多外观特征都可以自定义。下面列出了其中的一部分:

·        通过 HelPBackColorHelpForeColorHelpVisible属性可以更改背景颜色、更改字体颜色或隐藏说明窗

·        通过 ToolbarVisible属性可以隐藏工具栏,通过 BackColor属性可以更改工具栏的颜色,通过 LargeButtons属性可以显示大工具栏按钮。

·        使用 PropertySort属性可以按字母顺序对属性进行排序和分类。

·        通过 BackColor属性可以更改拆分器的颜色。

·        通过 LineColor属性可以更改网格线和边框。

·        本示例中的选项窗口不需要工具栏,因此可以将ToolbarVisible设置为 false。其余属性均保留默认设置。

更改属性的显示方式

  要更改某些属性的显示方式,您可以对这些属性应用不同的特性。特性是用于为类型、字段、方法和属性等编程元素添加批注的声明标记,在运行时可以使用反射对其进行检索。下面列出了其中的一部分:

DescriptionAttribute - 设置显示在属性下方说明帮助窗格中的属性文本。这是一种为活动属性(即具有焦点的属性)提供帮助文本的有效方法。可以将此特性应用于 MaxRepeatRate 属性。

CategoryAttribute - 设置属性在网格中所属的类别。当您需要将属性按类别名称分组时,此特性非常有用。如果没有为属性指定类别,该属性将被分配给杂项类别。可以将此特性应用于所有属性。

BrowsableAttribute – 表示是否在网格中显示属性。此特性可用于在网格中隐藏属性。默认情况下,公共属性始终显示在网格中。可以将此特性应用于 SettingsChanged 属性。

ReadOnlyAttribute – 表示属性是否为只读。此特性可用于禁止在网格中编辑属性。默认情况下,带有 get 和 set 访问函数的公共属性在网格中是可以编辑的。可以将此特性应用于 AppVersion 属性。

DefaultValueAttribute – 表示属性的默认值。如果希望为属性提供默认值,然后确定该属性值是否与默认值相同,则可使用此特性。可以将此特性应用于所有属性。

DefaultPropertyAttribute – 表示类的默认属性。在网格中选择某个类时,将首先突出显示该类的默认属性。

PropertyGrid有一個 property 為「SelectedObject」,用來指向所關連的物件。如下所示:

Class newclass=newClass();     (例:propertyGrid控件)

propertyGrid1.SelectedObject = newclass;

PropertyGrid主要应用:

1.自定义一个布尔型的属性下拉框:

private bool _bool;

[CategoryAttribute("布尔型"), DescriptionAttribute("布尔型")]

public bool 布尔型

{

get { return _bool; }

set { _bool = value;}

}

2.自定义一个枚举型的属性下拉框:

publicenum s

{

a = 1,

b = 2,

c = 4

}

private s test = s.a;

[CategoryAttribute("枚举型"), DescriptionAttribute("这是一个枚举的下拉框")]

public s 枚举

{

get { return test; }

set { test = value; }

}

3.自定义一个INT数组类型属性对话框:

privateint[] arr;

[CategoryAttribute("数组型"), DescriptionAttribute("这是一个数组的对话框")]

public int[] 数组

{

get { return arr; }

set { arr = value; }

}

     4 属性转换器(TypeConverter)

//自定义的StringConverter类型设置(包括自定义类型转换器

privatestring _fileName="1";

[CategoryAttribute("自定义的复杂类型设置(包括自定义类型转换器)"),TypeConverterAttribute(typeof(FileNameConverter)), ReadOnlyAttribute(false)]

publicstring FileName

{

get{ return this._fileName;}

set{ this._fileName = value;}

}

//定义一个FileNameConverter继承 StringConverter转换器

publicclass FileNameConverter: System.ComponentModel.StringConverter

{

///<summary>

///根据返回值确定是否支持下拉框的形式

///</summary>

///<returns>

/// true: 下来框的形式

/// false: 普通文本编辑的形式

///</returns>

publicoverride boolGetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContextcontext)

{

return true;

}

///下拉框中具体的内容

publicoverride System.ComponentModel.TypeConverter.StandardValuesCollectionGetStandardValues(System.ComponentModel.ITypeDescriptorContextcontext)

{

return new StandardValuesCollection(newstring[] { "1","2", "3"});

}

///根据返回值确定是否是不可编辑的文本框

/// true:  文本框不可以编辑

/// flase: 文本框可以编辑

publicoverride boolGetStandardValuesExclusive(System.ComponentModel.ITypeDescriptorContextcontext)

{

return true;

}

}

  5自定义一个带图片的属性

privateGrade x = newGrade(100);

publicGrade X

{

get

{

return x;

}

set

{

x = value;

}

}

///指定用作此属性所绑定到的对象的转换器的类型

[TypeConverterAttribute(typeof(ExpandableObjectConverter)),Category("自定义带图片属性"), Description("自定义带图片属性")]

//指定用来更改属性的编辑器

[Editor(typeof(GradeEditor),typeof(UITypeEditor))]

publicstruct Grade

{

privateint grade;

publicGrade(int grade)

{

this.grade = grade;

}

publicint Value

{

get

{

return grade;

}

}

}

publicclass GradeEditor: UITypeEditor

{

//     指示指定的上下文是否支持在指定的上下文内绘制对象值的表示形式。

//

//参数:

//   context:

//     可用于获取附加上下文信息的 System.ComponentModel.ITypeDescriptorContext。

//

//返回结果:

//     如果实现System.Drawing.Design.UITypeEditor.PaintValue(System.Object,System.Drawing.Graphics,System.Drawing.Rectangle),则为

//     true;否则为 false。

publicoverride boolGetPaintValueSupported(ITypeDescriptorContextcontext)

{

return true;

}

//使用指定的System.Drawing.Design.PaintValueEventArgs 绘制某个对象的值的表示形式。

publicoverride voidPaintValue(PaintValueEventArgs pe)

{

// 选择根据valu的正确的位图

string bmpName = null;

Grade g = (Grade)pe.Value;

if (g.Value > 80)

{    //可修改  bmpName   à图片

// bmpName = @"C:\Documents andSettings\Administrator\桌面\ll\ll\2.ico";

}

else if (g.Value >60)

{

//bmpName = @"C:\Documents and Settings\Administrator\桌面\ll\ll\3.ico";

}

else

{

// bmpName = @"C:\Documents andSettings\Administrator\桌面\ll\ll\4.ico";

}

// 画在表面上的位图提供了// 多个图片Bitmap b = new Bitmap(typeof(GradeEditor),bmpName)。

Bitmap b = new Bitmap(global::propertyGrid.Properties.Resources.t1);

//指示绘制内容和绘制位置  pe.Bounds-->获取图片是矩形

pe.Graphics.DrawImage(b, pe.Bounds);

//释放图象的对象

b.Dispose();

}

}

如图1所示:      如图2所示:

 6属性框选项卡的扩展   -à属性窗口的工具栏上有一个像闪电的按钮,按下这个按钮属性窗口就会切换到属性二

//标识为要显示的属性选项卡   PropertyTabScope.Component:此选项卡被添加到当前的”属性“窗口中去

[PropertyTabAttribute(typeof(TypeCategoryTab),PropertyTabScope.Component)]

classClass

{

private string _属性二 ;

[BrowsableAttribute(false)]

public string属性二

{

get{return  _属性二; }

set{ _属性二=value;}

}

public classTypeCategoryTab :System.Windows.Forms.Design.PropertyTab

{

// 提供自定义一个 选项卡按扭  名字

publicoverride stringTabName

{

get

{

return"属性(二)";

}

}

// 提供选项卡按扭  的位图

publicoverride System.Drawing.Bitmap Bitmap

{

get

{

Bitmapbmp = new Bitmap(global::propertyGrid.Properties.Resources.t1);

returnbmp;

}

}

//获取指定组件属性的集合的对象

//component:检索属性的组件

//attributes:检索的属性(Property) 的属性 (Attribute) 的System.Attribute 类型的数组

publicoverride System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, System.Attribute[]attributes)

{///检索  属性框中属性为隐藏的->[BrowsableAttribute(false)]的属性集合

PropertyDescriptorCollectionprops;

Attribute[]att = new Attribute[]{ BrowsableAttribute.No};

if(attributes == null)

props = TypeDescriptor.GetProperties(component);

else

props = TypeDescriptor.GetProperties(component, att);

return props;

}

///  获取指定组件的属性。

publicoverride System.ComponentModel.PropertyDescriptorCollection GetProperties(object component)

{

return this.GetProperties(component,null);

}

}

}

时间: 2024-12-10 01:53:34

NET 框架 PropertyGrid 控件的相关文章

WinForm窗体PropertyGrid控件的使用

使用过 Microsoft Visual Basic 或 Microsoft Visual Studio .NET的朋友,一定使用过属性浏览器来浏览.查看或编辑一个或多个对象的属性..NET 框架 PropertyGrid 控件是 Visual Studio .NET 属性浏览器的核心.PropertyGrid 控件显示对象或类型的属性,并主要通过使用反射(在运行时提供类型信息的技术)来检索项目的属性.PropertyGrid控件包含以下部分:一般属性.可展开属性.属性类别.属性说明和属性编辑器

C# PropertyGrid控件应用心得

何处使用 PropertyGrid 控件 在应用程序中的很多地方,您都可以使用户与 PropertyGrid 进行交互,从而获得更丰富的编辑体验.例如,某个应用程序包含多个用户可以设置的“设置”或选项,其中一些可能十分复杂.您可以使用单选按钮.组合框或文本框来表示这些选项.但本文将逐步介绍如何使用 PropertyGrid 控件创建选项窗口来设置应用程序选项.上面所创建的 OptionsDialog 窗体即是选项窗口的开始.现在,我们创建一个名为 AppSettings 的类,其中包含映射到应用

【转】PropertyGrid控件中的多级显示

运行效果: 解决方案: MainForm.cs public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { CProvincialCapital proCap = new CProvincialCapital("南京市", 10000000); CProvince pro

C# 如何定义让PropertyGrid控件显示[...]按钮,并且点击后以下拉框形式显示自定义控件编辑属性值

关于PropertyGrid控件的详细用法请参考文献: 1.C# PropertyGrid控件应用心得 2.C#自定义PropertyGrid属性 首先定义一个要在下拉框显示的控件: using System; using System.Windows.Forms; namespace Simon.WinForms.Examples.PropertyGrid { public class EditorControl : UserControl { public EditorControl() {

propertyGrid控件 z

1.如果属性是enum类型,那么自然就是下拉的. 2.如果是你自定义的下拉数据,那么需要用到转换属性标签TypeConverter 参见: http://blog.csdn.net/luyifeiniu/article/details/5426960#创建 PropertyGrid 控件 http://blog.csdn.net/jjhua/article/details/23100143

PropertyGrid控件 分类(Category)及属性(Property)排序

最近在做表单设计器,设计器上的控件都是我们自己封装的,但每个属性类别里的属性是按照属性的拼音排序的,现在想按照PropertyIndex标识进行排序(PropertyIndex的后三位是用来标识编辑器的). 具体实现如下: using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.ComponentModel; using HC.Test.Com

WinForm小白的WPF初试一:从PropertyGrid控件,输出内容到Word(上)

学WinForm也就半年,然后转到WPF,还在熟悉中.最近拿到一个任务:从PropertyGrid控件,输出内容到Word.难点有: 一.PropertyGrid控件是WinForm控件,在WPF中并不能直接从工具箱获得,或者直接在XMAL中声明使用. 如要使用,需要使用WindowFormHost控件,再在其内部装载PropertyGrid控件.当然前提要在XAML中引用CLR—NAMESAPCE的SYSTEM.WINDOWS.FORMS命名空间.详细请看此处链接:http://www.cnb

FoxOne---一个快速高效的BS框架--WEB控件属性编辑器

FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架--(4) 我们都知道,VS中有个WEBFORM的控件属性编辑器,能够自动反射控件的各个属性,并且根据属性的类型出现相应的编辑控件,例如: 1.布尔类型,对应下拉框,里面的选项出现 是 和 否 2.枚举类型,对应下拉框,里面的选项出现的是枚举的各个值 3.string类型和int类型,出现的都是输入框

框架的控件隐藏

/** * 设置按钮按钮的可用或只读控制 设置按钮的显示和隐藏 * @param btn 单按钮的NAME或是存放多个按钮名称的数组 * @param status 固定值:true 或是 false * @param status1 固定值 :true (显示控件) 或者 false(隐藏控件) 或者 不传值(默认显示控件) * @returns 没有返回值 * 使用方法1: * 设置按钮name="btnQuery" 和 name="btnCls" 只读,设置按