0

这是一个令人尴尬的问题,但我觉得我在过去的几个小时里尝试了一切。

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

 #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 和 using 命名空间,一切都很好。

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

更新: C# 项目是 .NET 4 客户端配置文件,这就是为什么我收到错误指示缺少命名空间的原因,这是误导性的。将目标框架更改为 .NET 4 解决了这个问题。

4

1 回答 1

3

C++/CLI 等价于typeof(). ::typeid试试这个:

[Editor(FolderNameEditor::typeid, UITypeEditor::typeid)]
于 2012-11-28T00:02:55.703 回答