这是一个令人尴尬的问题,但我觉得我在最近几个小时内尝试了所有内容。
我只想将以下属性添加到我的属性
#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解决了这个问题。
答案 0 :(得分:3)
与typeof()
等效的C ++ / CLI为::typeid
。试试这个:
[Editor(FolderNameEditor::typeid, UITypeEditor::typeid)]