代码之家  ›  专栏  ›  技术社区  ›  One Monkey

C表单应用程序集合

  •  0
  • One Monkey  · 技术社区  · 16 年前

    我用的是.NET 2.0,这让我很疯狂,但可能有一件事我没有做,我现在太困惑了,看不见。

    我有一个应用程序,其中有一个定制的对象集合,只有主窗体能够更改该集合的内容,其他所有窗体都可以从中读取。

    实际上只有一个表单,但我需要它具有多次调用的能力,因为它编辑定制集合中的不同项。因此,让孩子形成对话是不切实际的。必须能够打开此表单的多个实例,其中包含来自集合的不同项。

    我只是想不出一种方法来让所有的形式都围绕着这个集合的同一个实例。就像我说的,我可能遗漏了一些明显的东西,但我已经不能正确地思考这个问题了。

    编辑:伊克斯!我无法很好地解释自己。所有子窗体都应该能够读写集合项,但我希望在程序运行时一次只使用集合的一个实例。

    编辑2:原来我需要的是一个单身汉。我已经在另一个项目中实现了类似的解决方案。感谢下面的评论人,他没有留下一个真正的答案,我可以标记为正确的答案,即使他们钉住它。

    3 回复  |  直到 15 年前
        1
  •  3
  •   BenAlabaster    16 年前

    如果主窗体需要读/写访问权限,但其他窗体不需要,那么我将使集合成为主窗体的一个属性,它从窗体内读/写,但从窗体外只读。您可以使用以下方法来完成此操作:

    C.*

    private myCollection _MyCollection; 
    public myCollection MyCollection { 
        get { return _MyCollection.AsReadOnly(); } 
        private set { _MyCollection = value; } 
    } 
    

    VB

    Private _MyCollection As myCollection
    Public Property MyCollection() As myCollection
      Get
         Return _MyCollection.AsReadOnly
      End Get
      Private Set(ByVal value As myCollection)
        _MyCollection = value
      End Set
    End Property
    

    然后,您可以通过选择引用myCollection或myCollection从表单内部引用集合,但从表单外部,集合将是只读的,因此不可编辑。

    编辑: 在编辑之后,它看起来像是一个单独的集合,正如前面建议的那样,这是否意味着表单的所有实例都应该能够编辑此集合?如果是这样,那么将集合放入静态类中:

    Private _MyCollection as myCollection = Nothing
    Public Shared ReadOnly Property MyCollection() As myCollection
       Get
          If _MyCollection is Nothing Then _MyCollection = New myCollection
          Return _MyCollection
       End Get
    End Property
    

    现在,第一次从某个窗体中引用集合时,它将实例化一个新集合,然后可以从中添加/删除项。每次引用此窗体或其他窗体中的集合时,它都将已被实例化,因此它将返回最初实例化的集合。但是,没有一个表单能够设置新的集合,只引用由单例模式实例化的集合。

        2
  •  1
  •   Anthony Waqas Raja    16 年前

    看看这个方法 List<T>.AsReadOnly()

    这允许您返回列表的只读包装器。

    例如

    private LIst<Foo> fooList; 
    
    public ReadOnlyCollection<Foo> Foo { 
        get { return fooList.AsReadOnly(); }
    
        3
  •  0
  •   P Daddy    16 年前

    所有表单都需要对集合进行读/写访问?那么,你现在唯一的问题是如何给你的孩子一个对这个集合的引用?不能将它传递给子窗体的构造函数吗?或者把它作为你的主要表格的公共财产(你的孩子表格可以从他们那里得到参考 Owner 属性?或者,:::颤抖:::使其成为公共静态属性?