跨多个类实例存储和检索控制值C#

时间:2012-05-05 06:29:14

标签: c# treeview instances storage

我不是在寻求答案,而是寻求创建更好解决方案的想法和建议。我甚至在寻找一些基本的面向对象设计理论的参考,因为我觉得这必须是一个常见的场景,但我不知道如何正确地表达它以找到可靠的搜索结果。

我提出了这个例子(我会省略代码,因为它很容易解释): 我有一个表单包含一个Treeview,一个Button和一个Textbox。我还有一个TextClass类,它有2个字符串:Text和Name。

单击按钮时:

  • 创建一个新的TreeNode。为TreeNode分配一个唯一名称(例如:“Instance1”)并将其添加到Treeview
  • 创建类的实例TextClass。将唯一名称(例如:“Instance1”)分配给TextClass.Name
  • 将这个TextClass的新实例添加到列表TextClassList

在Treeview中单击节点时:

  • 遍历列表TextClassList,找到与当前所选TreeNode.Name匹配的TextClass.Name字符串
  • 然后设置:Textbox.Text = TextClass.Text

触发Textbox_TextChanged时:

  • 遍历列表并找到与当前所选TreeNode,TreeNode.Name
  • 匹配的TextClass.Name字符串
  • 然后设置:TextClass.Text = Textbox.Text

所有这一切都很好,但似乎......马虎。我问是否有更好/正确的方法来实现这种存储和检索值的方法。如果这是一个OOP基础,我会很感激我可以搜索一些关键字。

谢谢你, 道格

1 个答案:

答案 0 :(得分:0)

TreeNode具有属性Tag,可用于存储与此节点关联的数据。因此,您可以为每个新创建的节点存储TextClass个实例。这样您就不必维护额外的列表并将其与TreeNode同步。

我也不会依赖关联的显示名称:如果希望名称可以更改或者允许两个节点具有相同的名称,则会遇到问题。

另一个问题是,如果没有Tag属性,你将如何做到这一点。然后,我将使用Dictionary将TreeNode实例映射到TextClass实例。

因此,如果我要做出一般规则:

  • 尝试尽可能使用真实引用而不是字符串来引用实例。
  • 请勿使用显示名称进行识别