【问题标题】:Storing and Retrieving Control Values Across Multiple Class Instances C#跨多个类实例存储和检索控制值 C#
【发布时间】:2012-05-05 18:28:09
【问题描述】:

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

我提出了这个例子(我将省略代码,因为它很容易解释): 我有一个包含一个树视图、一个按钮和一个文本框的表单。我还有一个类,TextClass,它有 2 个字符串:文本和名称。

当按钮被点击时:

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

在树视图中单击节点时:

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

Textbox_TextChanged 触发时:

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

所有这些工作都很好,但是看起来……草率。我在问是否有更好/正确的方法来处理这种存储和检索值的方法。如果这是一个 OOP 基础,我会很感激一些关键字,我可以做一些搜索。

谢谢, 道格

【问题讨论】:

  • 我假设您在这里使用 Winforms?如果您可以选择切换到 WPF,那么绑定将(几乎)免费为您处理很多场景:)
  • 我会研究 WPF 以备将来使用,但是对于这个程序,它必须是 winforms。谢谢你的建议

标签: c# treeview instances storage


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 啊哈哈。我确实喜欢使用真实引用而不是字符串的想法,是的,所以我将实现标签。感谢您的改进。
猜你喜欢
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2022-08-03
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多