UITypeEditor用来标识一个类型在属性网格(PropertyGrid)中的编辑方式,通过实现自定义的UITypeEditor类,就可以用各种自定义的方式在属性网格中编辑对象属性了,比如自定义一个文件选择对话框,来选择游戏引擎的虚拟文件系统中的文件:
using namespace System::ComponentModel; public ref class VirtualFileEditor : public UITypeEditor { protected: String^ m_Filter; public: VirtualFileEditor( void ) { //定义文件过滤器 m_Filter = L"游戏地图文件(*.map)|*.map"; } virtual UITypeEditorEditStyle GetEditStyle( ITypeDescriptorContext ^ context ) override { return UITypeEditorEditStyle::Modal; //在属性网格中显示一个按钮,点击按钮弹出一个模态对话框 } virtual System::Object ^ EditValue( ITypeDescriptorContext ^ context, System::IServiceProvider ^ provider, System::Object ^ value ) override { //在这里用自定义的文件选择对话框来选择文件 //假设用VirtualFileDialog来选择虚拟文件系统中的文件 VirtualFileDialog ^ fd = gcnew VirtualFileDialog(); fd->Filter = m_Filter; if( fd->ShowDialog() == System::Windows::Forms::DialogResult::OK ) { return fd->FileName; } //如果用户没有选择文件,则返回原来的值 return value; } };
使用的时候,需要在Editor特性中指定使用VirtualFileEditor:
public ref class SomeClass { public: [Category( "场景" ),Description( "场景使用的地图文件" ),Editor( VirtualFileEditor::typeid, UITypeEditor::typeid )] property String^ 地图文件 { String^ get() {return m_Map;} void set(String^ value) {m_Map=value;} } };