views:

445

answers:

3

I've started using this alot to link elements of my UI to their data backing class (whatever that might be). What are some of the common uses you put the Tag property to use for?

Indeed, do you use it at all? I know I didn't for a very long time.

+4  A: 

Just as you describe, the most frequent use of the Tag property I have come across and use in both WinForms, WPF and Silverlight is to indicate the real data that the control relates to. This is especially useful on ListViewItem instances or auto-generated user interface where you want to use the same event handler for multiple objects where only the target data is different (i.e. the action to be performed remains the same).

However, I have also used the Tag to store an enumeration value (though you should avoid value types as it would cause boxing when assigning the value to the Tag property) or a string that is then used to determine the action that needs to be performed instead of the data on which to perform it, and in one particular usage, I stored a delegate so that I could auto-generate some buttons and embed their handlers in the Tag (the handler information was supplied in a data driven manner).

I am sure there are many other ways to use Tag and many other ways to replace the uses of Tag with something more strongly typed, but that's how I've used it.

Jeff Yates
A delegate? I suppose it should have, but it never even occured to me that delegates are objects too.
Matthew Scharley
Using ListViewItem's tags right now: In a hierarchy of folders/files, I use the Tag to store the full path to a file, while the Header shows only the Name.
Will Eddins
+1  A: 

The Tag property is an ancient (in programming language terms) hold over for controls. To my knowledge, it's been used in everything from visual basic, delphi, and pretty much any other gui based language.

It is simply an extra property that allows you to add a numeric value for any reason you want to the control.

I've seen it used for everything from a counter to holding a record id that the control is tied to.

Chris Lively
I'd avoid storing value types in it as that boxes the value.
Jeff Yates
In C#, it's not a numeric value, but an object. Instead of holding a record ID, you could hold a reference to the actual record.
Will Eddins
+3  A: 

I use it all the time with ListViews and TreeViews. It makes trying to find the underlying data much easier. In fact, I'm not sure how you'd make a readable Winforms application without it.

I also use it a lot when creating ContextMenus at run-time. I stuff an object into the Tag member of each ToolStripMenuItem and then I can point each menu item's click handler at the same method. It results in a lot less code.

I just wish it didn't require so much casting.

NascarEd