delphi - software - https www devexpress com demo
¿Cuál es el propósito de la propiedad ''Etiqueta'' de los componentes de Delphi VCL? (8)
¿Hay algún propósito específico para la propiedad ''Etiqueta'' de los componentes Delphi VCL? He buscado en Google algunos ejemplos usándolo como, por ejemplo, una propiedad de ''color'' o usando el valor como una dirección de puntero, pero ¿es ''una buena práctica'' usarlo, o se considera ''mala práctica'' ya que ata el lógica del programa a la interfaz de usuario?
¡Es genial! Un regalo de promoción. Lo uso todo el tiempo para almacenar una pieza adicional de información asociada con el objeto.
A menudo guardo un puntero a una estructura de datos asociada, o a veces un entero que puede ser un índice en alguna otra matriz.
Puede usarlo como un contador para las veces que se accede al objeto, o lo que sea.
El único inconveniente es que si su programa utiliza mucha memoria y tiene millones de objetos, esos 4 bytes para cada etiqueta se suman, especialmente si no los está usando. En ese caso, para su tipo de objeto más prolífico, es posible que desee crear su propia versión sin la etiqueta.
Como otros han dicho, es un lugar para poner cualquier cosa. Por lo general, esto es útil cuando se asocian dos objetos a través de una referencia de objeto o un puntero. La etiqueta tiene el tamaño perfecto para contener un puntero, por lo que si necesita, por ejemplo, mantener un objeto vinculado a un elemento en un cuadro de lista, se vuelve bastante sencillo.
Es un lugar para agregar información a cualquier componente, incluso si no tiene la fuente para ese componente. Debe usarse con cuidado, ya que puede usarlo solo para un propósito por componente. Por esa razón, las bibliotecas nunca deberían usarlo.
La propiedad "etiqueta" está allí como un "contenedor de carga" para lo que sea que quieras hacer con él.
Algo con lo que a menudo se usa es en controladores de eventos cuando tienes muchos componentes similares que comparten un manejador de eventos. El controlador de eventos puede encontrar a su interlocutor y luego consultar su valor de etiqueta para obtener más información acerca de en qué se supone que está actuando.
EDITAR:
Ejemplo: una aplicación de calculadora puede etiquetar los botones numéricos con sus respectivos números ... ejemplo tonto e incompleto, pero se entiende la idea. El controlador de eventos podría entonces sacar el número para agregarlo a la pantalla y al acumulador directamente de la etiqueta en lugar de tener que averiguar qué botón debe hacer qué.
También se puede usar para fines de agrupamiento, por ejemplo, si desea acceder a todos los componentes con un valor de etiqueta específico, independientemente del tipo de componente.
Tengo algunos problemas fundamentales con la propiedad Tag. Bueno, no exactamente esta propiedad en sí misma porque funciona según lo previsto.
En general, considero usar cualquier variable universal / general / multipropósito como una ''mala práctica''. Pueden ser útiles durante la depuración pero son muy dañinos en entornos de producción / misión crítica. Reducen la legibilidad del código y la comprensibilidad porque nadie sabe qué hace un atributo o propiedad con el nombre ''Etiqueta''. Por supuesto que sabes por qué estás usando esta variable. Pero tarde o temprano lo olvidarás (sé que lo harás) y confiar en este valor hace que todo sea más complicado. Esta es la razón por la cual deberíamos nombrar adecuadamente cada variable y propiedad para ayudarnos a entender qué hace el código.
Usar la propiedad Tag es solo una solución / atajo para evitar la implementación de código comprensible y bien escrito. Esta es la PRÁCTICA y es adictiva. La próxima vez que necesite almacenar un nuevo valor entero vinculado a un componente, usará la propiedad Tag sin considerar ninguna otra forma de almacenar los valores deseados. Y almacenar un puntero en la propiedad Tag es una idea horrible: tiene que convertir este valor cada vez que depure los punteros.
Dígame: ¿Cuántas veces se encontró en una situación en la que quería almacenar un nuevo valor en la propiedad Tag, pero se dio cuenta de que esta propiedad ya se usa para un propósito diferente (si solo hubiera una propiedad ''Tag2'' en cada componente...).
Tiene 2 botones en su formulario, en uno configura la Etiqueta = 1, y la otra Etiqueta = 2. Ahora asigna el mismo evento OnClick a ambos botones y escribe el código de esta manera:
procedure TForm28.Button1Click(Sender: TObject);
begin
case (Sender as TButton).Tag of
1: Caption := ''you pressed button 1'';
2: Caption := ''you pressed button 2'';
end;
end;
o más compacto:
procedure TForm28.Button1Click(Sender: TObject);
begin
Caption := ''you pressed button '' + IntToStr((Sender as TButton).Tag);
end;
Básicamente, Tag te permitirá identificar qué control disparó el evento. Piensa si tienes un formulario con botones creados dinámicamente ... una lista con usuarios de la base de datos, y en cada registro colocas un botón "Eliminar usuario". En esta situación, no puede crear un evento para cada botón, creará un evento que se asignará a todos los botones ... y puede poner en la etiqueta el ID de usuario, por ejemplo. De esta forma, cuando implemente el evento para manejar todos los botones, sabrá qué usuario eliminar.
Uso etiquetas todo el tiempo. Aquí hay unos ejemplos;
una muestra simple: tiene una computadora portátil (como un control de página sin pestañas) para que pueda definir botones como pestañas y escribir
NoteBook.ActivePage := TButton(Sender).Tag;
Una muestra más complicada; un entero puede contener 16 bits bolleanos; Luego puedo consultar a los remitentes hasta 16 condiciones para decidir cómo continuar el precio
If (BitCheck (Bit2,TButton(sender).tag=True) And BitCheck(bit12,TButton(Sender).Tag=False) Then
Begin
end;
If (BitCheck (Bit9,TButton(sender).tag=True) Or BitCheck(bit14,TButton(Sender).Tag=True) Then
Begin
end;
Tienes la idea