强大的PropertyGrid

 PropertyGrid, 做工具一定要用这东西.....

把要编辑的对象看成类的话, 所有要编辑的属性就是成员

嗯嗯, 最近看了几眼Ogitor, 它对于PropertyGrid的使用就很不错

所有要编辑的对象(灯光, 模型, 粒子等等)都有一个共同的基类, 每当选中一个可编辑对象时, 右边的属性框里就显示出当前对象的属性...(公司那个编辑器要多土就有多土-_-)

尽管Ribbon界面看起来很酷, 我还是对MFC提不起兴趣来...

.net里的PropertyGrid更方便, 一点一点来:

属性自动绑定:

ref class Human  
{  
public:  
    Human()  
    {  
 this->Name = "(None)";  
 this->Age = 0;  
 this->IsMale = false;  
    }  
    property String^ Name;  
    property int Age;  
    property bool IsMale;  
};  

只需要一句

this->propertyGrid1->SelectedObject = gcnew Human(); 

它就能自动识别出Human类中的property, 并且自动关联到PropertyGrid中:

对属性进行分类并加注释:

ref class Human  
{  
public:  
    Human()  
    {  
 this->Name = "(None)";  
 this->Age = 0;  
 this->IsMale = false;  
 this->SkinColor = Color::Yellow;  
    }  
    [CategoryAttribute("常规"), DescriptionAttribute("名字")]  
    property String^ Name;  
    [CategoryAttribute("常规"), DescriptionAttribute("年龄")]  
    property int Age;  
    [CategoryAttribute("外观"), DescriptionAttribute("性别")]  
    property bool IsMale;  
    [CategoryAttribute("外观"), DescriptionAttribute("肤色")]  
    property Color SkinColor;  
};  

太爽啦~颜色自己就能识别........

弄个Image类型居然还能自己选择文件...NB啊

除了基本类型之外, Font, Size, Color等复杂类型也可以支持, 那么自定义类型呢?

如果只是像上面那样放上的话, 只会得到个灰色不可编辑的东西~

要想让PropertyGrid能够展开Vector3属性, 指定一下TypeConverter就可以了:

[TypeConverterAttribute(ExpandableObjectConverter::typeid)]  
ref struct Vector3  
{  
    property float X;  
    property float Y;  
    property float Z;  
 virtual String^ ToString() override  
    {  
 return String::Format("({0}, {1}, {2})", this->X, this->Y, this->Z);  
    }  
}; 

对于枚举类型, PropertyGrid会自动显示成下拉框. 把性别改成枚举看看:

enum struct SexType  
{  
    Male,  
    Female  
};  

另外, 还可以弹出自定义的编辑界面, 比如随时间变化的曲线啦(经常用来做效果...)

这个, 暂时没需求, 不实现了, 有兴趣的参考:Getting the Most Out of the .NET Framework PropertyGrid Control

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏HTML5学堂

面向对象系列讲解——混合模式

HTML5学堂:我们解释了面向对象以及使用面向对象的原因,并书写了最为基本的面向对象的代码。同时我们提出了一些问题,工厂模式存在着一些缺陷,在这篇文章当中我们就...

34760
来自专栏偏前端工程师的驿站

ES6 Features系列:Template Strings & Tagged Template Strings

1. Brief   ES6(ECMAScript 6th edition)于2015年7月份发布,虽然各大浏览器仍未全面支持ES6,但我们可以在后端通过Nod...

20370
来自专栏守候书阁

个人小结--javascript实用技巧和写法建议

从大学到现在,接触前端已经有几年了,感想方面,就是对于程序员而言,想要提高自己的技术水平和编写易于阅读和维护的代码,我觉得不能每天都是平庸的写代码,更要去推敲,...

9610
来自专栏黑泽君的专栏

传智播客_毕姥爷_2012年毕向东Java基础教程_毕向东老师

视频百度网盘下载链接:https://pan.baidu.com/s/1bpD3P07#list/path=%2F

15310
来自专栏深度学习之tensorflow实战篇

R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)

首先准备测试数据*(mtcars) 分别为CSV. TXT read.table 默认形式读取CSV(×)与TXT(效果理想) ? ① > t...

2.4K60
来自专栏Coding迪斯尼

Reactjs+BootStrap开发自制编程语言Monkey的编译器:词法解析1

12110
来自专栏逍遥剑客的游戏开发

PhysX学习笔记(1): 基础

21730
来自专栏C语言及其他语言

【优秀题解】问题 1442:打印十字图

我的思路就是一步一步的分析,首先我想到的就是分配一块内存来储存图案,通过观察知道图案是一个方正,于是想到用字符矩阵。然后分布完成,首先就是把方块字符中...

6010
来自专栏郭耀华‘s Blog

Java英文单词Java基础常见英语词汇

Java英文单词Java基础常见英语词汇(共70个) OO: object-oriented ,面向对象               OOP:object-...

42180
来自专栏逸鹏说道

04.移动先行之谁主沉浮----XAML的探索

如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) XMAL引入 XAML 类似于 HTML,是一种特殊的XML语言 XAML本质上属于一种.N...

28760

扫码关注云+社区

领取腾讯云代金券