2010-09-29 23 views
13

? He notado las propiedades de Etiqueta con controles. ¿Está bien utilizar esto para hacer referencia a mis objetos personalizados, o debo mantenerme alejado de él, ya que requeriría boxeo y desembalaje que se ha mencionado como inseguro y no está recomendado.¿De qué sirve la propiedad Tag en .net

TreeNode tn = new TreeNode(); 
CustClass o = new CustClass() 
o.number = 123; 
tn.Tag = o; 

class CustClass 
{ 
    public int number {get; set;} 
} 
+1

Un buen lugar para empezar: [Referencia MSDN en Tag] (http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx) – NullUserException

+0

¿Por qué se etiqueta ese foro de programación langauge? totalmente sin relación. – TomTom

+4

@TomTom - porque el código que ha proporcionado está escrito en C#? Además, ¿qué demonios es 'net-winforms'? Revertir ... –

Respuesta

30

El propósito de la propiedad Tag es para que lo use para cualquier propósito que desee. Puede almacenar de forma segura cualquier cosa allí que desee.

Es costumbre declarar una clase específicamente destinada a ser almacenada en la propiedad Tag (como lo hizo con su CustClass). Pero si solo necesita un valor, no hay nada de malo en almacenarlo directamente en int.

¿Dónde leíste que el boxeo/unboxing es "inseguro"? Eso no es absolutamente cierto. (Algunas personas afirman que es ineficiente, pero incluso eso no es cierto.) Además, su código ni siquiera contiene un ejemplo de boxeo en absoluto. CustClass es un tipo de referencia. Solo los tipos de valores están encuadrados cuando se asignan a object.

+4

Unboxing es ineficaz cuando se usa en grandes cantidades, pero para un int en un control es poco probable que se note. –

2

No creo que esto sea un problema de boxeo o unboxing para usarlo de la manera que desee. Por lo que yo sé, esa propiedad Tag es solo para el propósito del programador, por lo que puede usarla de la manera que necesita que se use.

Consulte la propiedad Control.Tag en MSDN para obtener más información sobre cómo usar esta propiedad.

Por ejemplo, solía usarlo para introducir instrucciones para el usuario en las aplicaciones de Windows Forms. Cuando se desencadenó el evento GotFocus de control, a la propiedad Label.Text de las instrucciones se le asignó el valor de la propiedad Tag de control que contenía la cadena de instrucciones.

0

De enlaces también mencionado por otros aquí:

en https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx se lee:

Cualquier tipo derivado de la clase de objetos se pueden asignar a este propiedad. Si la propiedad Tag se establece a través del diseñador de Windows Forms , solo se puede asignar texto.

Un uso común de la propiedad Tag es almacenar datos que están estrechamente relacionados con el control . Por ejemplo, si tiene un control que muestra información sobre un cliente, puede almacenar un DataSet que contiene el historial de pedidos del cliente en la propiedad Tag de ese control para que se pueda acceder rápidamente a los datos.

y al https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx se lee:

... ejemplo se crea un nodo raíz del árbol para asignar a los nodos del árbol niño. Un nodo de árbol hijo para cada objeto Cliente en una ArrayList se agrega a nodo de árbol raíz así como un nodo de árbol hijo para cada objeto de orden asignado al objeto Cliente. El objeto Cliente se asigna a la propiedad Etiqueta y los nodos de árbol que representan los objetos del Cliente son con texto naranja.Este ejemplo requiere que tenga un objeto Cliente y orden definido, un control TreeView en un formulario y una ArrayList llamada customerArray que contiene objetos Customer.