0

I'm not seeking an answer but rather ideas and suggestions for creating a better solution. I'm even looking for perhaps a reference to some fundamental Object Oriented Design theory as I feel this must be a common scenario, yet I don't know how to phrase it correctly to find solid search results.

I pose this example (I'll spare the code since it's easily explained): I have one Form containing one Treeview, one Button, and one Textbox. I also have a class, TextClass, which has 2 strings: Text and Name.

When the button is clicked:

  • Create a new TreeNode. Assign the TreeNode a unique name (ex: "Instance1") and add it to the Treeview
  • Create an instance of the class, TextClass. Assign the unique name (ex: "Instance1") to the TextClass.Name
  • Add this new instance of TextClass to a list, TextClassList

When a node is clicked in the Treeview:

  • Loop through the list, TextClassList, and find the TextClass.Name string which matches the currently selected TreeNode.Name
  • Then set: Textbox.Text = TextClass.Text

When the Textbox_TextChanged is triggered:

  • Loop through the list and find the TextClass.Name string which matches the currently selected TreeNode, TreeNode.Name
  • Then set: TextClass.Text = Textbox.Text

All of this works just fine, however it seems... sloppy. I am asking if there is a better/proper way of going about this method of storing and retrieving values. If this is a OOP fundamental, I would appreciate some keywords that I could do some searching on.

Thank you, Doug

Doug
  • 41
  • 9
  • I'm assuming you're using Winforms here? If you have the option of switching to WPF, then binding will take care of a lot of your scenario for you for (almost) free :) – Jedidja May 05 '12 at 10:32
  • I will look into WPF for future use, however for this program it must be winforms. Thank you for your suggestion – Doug May 05 '12 at 19:52

1 Answers1

0

A TreeNode has a property Tag which can be used to store data which is associated with this node. So you could store TextClass instances with each newly created node. This way you don't have to maintain an extra list and sync it with the TreeNode.

I also wouldn't rely on display names for the association: you run into problems if you want the names to be changable or if two nodes are allowed to have the same name.

Another question is, how you would do this if no Tag property would be there. I would then use a Dictionary to map the TreeNode instanes to TextClass instances.

So if I was to make a general rule out of this:

  • Try to use real references wherever possible rather than strings to refer to an instance.
  • Don't use display names for identification
Markus Meyer
  • 173
  • 1
  • 6
  • 14
  • Ah hah. I do like the idea of using real references rather than strings yes, so I shall implement the Tag. Thank you for this improvement. – Doug May 05 '12 at 19:55