什么是[Editor(typeof(FolderNameEditor),typeof(UITypeEditor))]的C ++ / CLI版本?

时间:2012-11-28 00:00:03

标签: c++ c++-cli propertygrid

这是一个令人尴尬的问题,但我觉得我在最近几个小时内尝试了所有内容。

我只想将以下属性添加到我的属性

 #using <System.Drawing.dll>
 #using <System.Design.dll>
 ...
 using namespace System::Drawing::Design;
 using namespace System::Configuration;
 using namespace System::ComponentModel;
 using namespace System::Windows::Forms::Design;
 ...

[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))]
 property System::String^           DefaultWorkingDirectory;

首先,我尝试了它并且编译器说“非法使用该类型(FolderNameEditor)。”

现在我尝试了这个

    [Editor(Type::GetType("System.Windows.Form.Design.FolderNameEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), 
        Type::GetType("System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"))]

但它说非法属性论证。

如果我这样做,C ++ / CLI项目将编译

    [Editor("System.Windows.Form.Design.FolderNameEditor", "System.Drawing.Design.UITypeEditor")]

但是每当我试图从C#项目中获取项目的引用时,我都会收到错误信息,说明命名空间丢失了。如果我注释掉编辑器属性和#using并使用上面的命名空间,一切都很好。

出于某种原因,我在MSDN中找不到相关资料,如果你能指出正确的文件,那将不胜感激。

更新: C#项目是.NET 4 Client Profile,这就是我收到错误的原因,指出错误的命名空间是误导性的。将目标框架更改为.NET 4解决了这个问题。

1 个答案:

答案 0 :(得分:3)

typeof()等效的C ++ / CLI为::typeid。试试这个:

[Editor(FolderNameEditor::typeid, UITypeEditor::typeid)]