在设计模式中编辑集合的最简单方法?

2024-03-27

最简单的编辑方法是什么persist像这样的集合decimal[] or List<string>在 WinForms 设计器中?

第一个问题是需要一个无参数构造函数。所以我做了一个简单的包装类: (在某些时候这就像MyObject<T>,但 WinForms 设计器代码生成器不知道如何处理它)

[Serializable()]
public class MyObject
{
      public MyObject() {}
      public decimal Value {get; set;}
}

在容器类中,我们定义一个属性并向其添加 CollectionEditor 属性:

public class MyContainer
{
      private List<MyObject> _col = new List<MyObject>();

      [Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
      public List<MyObject> Collection
      {
           get { return _col; }
           set { _col = value; }
      }
}

现在,我根据堆栈溢出的答案和 codeproject.com 上的文章尝试了各种方法:

  • 带有小数[]字段的ArrayEditor
  • MyObject 的自定义类型转换器
  • 列表的自定义集合类
  • 容器类的读/写属性
  • 带有 EditValue 实现的自定义编辑器
  • 为 MyObject 实现 IComponent 接口
  • 尝试添加 DesignerSerializationVisibility(DesignerSerializationVisibility.Content)

我确实让它工作了,这样

  • 该集合在设计模式中可见
  • 该集合可在设计模式中编辑
  • 可以将新项目添加到设计模式中的集合中

但是,通过保存、关闭和重新打开表单,集合中的元素永远不会保留。

Edit:汉斯给了我一些提示(他的评论不知何故变成了空白)。我遵循了他的指导方针并更新了上面的源代码,不幸的是仍然不起作用......


我建议,如果可能的话,您公开一个与框架中已使用的类型相同的集合属性,这样您就可以重用现有的集合编辑器。例如,如果您使用字符串集合类,那么您可以执行以下操作并重用 WinForms 现有编辑器...

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor("System.Windows.Forms.Design.StringCollectionEditor, 
             System.Design, Version=2.0.0.0, Culture=neutral, 
             PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    public StringCollection Items
    {
        get { return _myStringCollection; }
    }

或者,如果您可以公开string[]然后这样做...

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    [Editor("System.Windows.Forms.Design.StringArrayEditor, 
            System.Design, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
    public string[] Lines
    {
        get { return _myStringArray; }
        set { myStringArray = value; }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在设计模式中编辑集合的最简单方法? 的相关文章

随机推荐

  • 如何在 For Each...Next 循环中获取对象的索引?

    我使用以下语法来循环列表集合 For Each PropertyActor As JCPropertyActor In MyProperty PropertyActors i IndexOf PropertyActor Next 如何获取循
  • Selenium 下载完整的 html 页面

    我正在学习使用 Python Selenium 和 BeautifulSoup 进行网页抓取 目前 我正在尝试抓取Google搜索趋势上的热门搜索http www google com trends hottrends pn p5 http
  • 按索引动态添加项目到 List 而不使用 .Add()

    我试图将项目添加到列表中without动态使用 Add 请注意 由于我的项目的性质 我无法使用字典或简单数组甚至 HashSet 等替代数据结构 我需要一个锻炼解决方案来解决以下问题 List
  • ipython笔记本:如何并行化外部脚本

    我正在尝试使用 ipython 并行库中的并行计算 但我对此知之甚少 并且我发现对于对并行计算一无所知的人来说很难阅读该文档 有趣的是 我发现的所有教程都只是重复使用文档中的示例 并具有相同的解释 在我看来 这是毫无用处的 基本上我想做的是
  • 获取地点的纬度和经度 dbpedia

    我想获取一个我已经知道其名称的地点的纬度和经度 PREFIX geo
  • 有没有办法从 Ruby 中的实例调用私有类方法?

    以外self class send method args 当然 我想在类和实例级别提供一个相当复杂的方法 而不需要重复代码 UPDATE Jonathan Branam 这是我的假设 但我想确保没有其他人找到解决方法 Ruby 中的可见性
  • Objective-C:检查是否使用枚举选项

    我有一个使用 typedef 枚举的自定义对象 如果我为对象设置了一些枚举选项 如何检查这些选项是否正在使用 typedef enum Option1 Option2 Option3 Options 创建对象时我可能会使用 myobject
  • 异步 ASP.NET Web API 中的 ThreadStatic

    是否有可能在单个请求中使用线程静态变量 当前代码使用线程静态变量进行日志记录 现在我们想要使用异步控制器方法 具有异步和等待模式 这会导致问题 因为打开新线程时该变量为空 await会导致线程跳转 所以线程静态变量自然会出现问题 要解决此问
  • 实现 MutationObserver 代替 DOMSubtreeModified

    我有一个select multiple 我已经上过课custom multiselect在我正在捕捉的页面上DOMSubtreeModified事件如下 HTML
  • 使用Python直接向USB发送信号

    如何使用 Python 将 USB 端口连接设置为高或低 这可用于定制 USB 设备 例如 假设我有一个 LED 连接到 USB 端口 数据线 现在通过代码我想闪烁它或控制它 现在 这可以通过使用任何微控制器 Arduino Raspber
  • Android studio 的aspectj - AJDT 插件在哪里

    如何为 android studio 安装 AJDT 我知道 Eclipse 有一个 但我在 android studio 中找不到任何东西 我想做的是在启动之前对我的每个方法调用进行安全检查 我已经从这个网站尝试过AJDT http ec
  • 如何使用 ant build.xml 导入现有的 java web 项目

    我正在尝试使用导入功能将现有的 java web 项目 使用 ant build xml 构建 导入到 Eclipse 中 但 Eclipse 无法将其识别为项目 如何将项目导入到eclipse中 编辑 我所做的是将项目导入为 Java 项
  • 从 GitHub 上已删除的分支恢复作为拉取请求发送的提交

    我做了一件蠢事 I fork在 GitHub 上发布了一个存储库 我做了一些改变 commit把它们放在我的叉子上 我将此提交作为拉取请求回到原来的仓库 愚蠢的部分来了 我deleted 我的叉子 原始存储库的所有者要求在接受拉取请求之前对
  • 图例显示带有 geom_vline 的意外黑线

    在查看了 StackOverflow 上提供的一些答案后 我一直试图添加一个额外的图例 但不知何故我无法完成这项工作 我正在使用以下代码 x breaks lt seq as Date 2010 1 1 as Date 2015 4 1 m
  • 函数隐私和单元测试 Haskell

    你如何处理 Haskell 中的函数可见性和单元测试 如果导出模块中的每个函数以便单元测试可以访问它们 则可能会导致其他人调用不应出现在公共 API 中的函数 我想用 LANGUAGE CPP 然后围绕出口 ifdef LANGUAGE C
  • git svn:svn 的密码未存储

    我正在使用 git svn 对中央远程 svn 存储库使用 git SVN 存储库使用带有自签名证书的 https 一切正常 只有一个令人讨厌的例外 只要我直接使用 svn 密码就会被记住 所以只能在第一个命令中输入密码 当使用git sv
  • window.onload 与

    两者到底有什么区别window onload事件和onload事件的body标签 我什么时候使用哪个以及如何正确完成 window onload myOnloadFunc and 是不同的使用方式同一个事件 Using window onl
  • 如何使用 ScriptTags 为 shopify 开发 Rails 应用程序

    我在 Heroku 中部署了一个 Shopify 应用程序 并使用 Rails 开发 我需要从任何 Shopify 商店的前端调用 JavaScript 函数 我读过这篇文章 http www shopify com technology
  • Appcelerator Titanium:Facebook 图片上传失败

    我的 Titanium 软件中从 Facebook 上传图像时出现错误 每次我想从我的应用程序上传图像时 我都会收到以下信息 失败 v2 1 及更高版本已弃用 REST API 但如果我在 KitchenSink 示例应用程序中尝试相同的代
  • 在设计模式中编辑集合的最简单方法?

    最简单的编辑方法是什么persist像这样的集合decimal or List