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

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

由于某些原因,我在MSDN中找不到相关资料,如果你能指出合适的文档,将不胜感激。

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

最佳答案

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

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

关于c++ - [Editor(typeof(FolderNameEditor), typeof(UITypeEditor))] 的 C++/CLI 版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13595441/

相关文章:

.net - 如何强制 PropertyGrid 显示特定属性的自定义对话框?

c++ - 虚方法和构造函数?

c++ - 结构化绑定(bind)的 decltype(auto) 是否应该是引用?

c++ - 带有名称的枚举标志

C++/CLI 将位图转换为 OpenCV Mat

c++-cli - C++/CLI nullptr 被错误地视为 "int"

windows - 这是消除警告 C4945(已从另一个程序集导入的符号)的正确方法吗?

c# - 在属性网格中编辑集合的正确方法是什么

.net - 如何在 PropertyGrid 中为模态 UITypeEditor 重新标记省略号按钮?

C++模板特化方法定义