![]() |
Concatenar CheckBox
Que tal mi pregunta es la siguiente:
Tengo una forma en la cual tengo mas de 100 "CheckBox", con cada uno de ellos realizo practicamente los mismos procedimientos, no quiero que me quede un codigo enorme con practicamente lo mismo por lo tanto decidi meterla condicion " if " del CheckBox a un ciclo "for", pretendo que el ciclo cambie el numero de el "CheckBoxn.Checked" pero tengo problemas para lograrlo. Ejemplo: ------------------------------------------ //Asi trabaja bien if CheckBox1.Checked then begin //codigo de trabajo end ------------------------------------------ //Esto es lo que pretendo for b:= 1 to 100 do begin if {Componente CheckBox concatenado con el numero del ciclo for} then begin //codigo de trabajo end ------------------------------------------- Lo intente de varias formas desde meter "CheckBox" a un string y de ahi concatenarlo, pero pues uno es booleano y el otro string, utilice la funcion "strtobool()" pero no me funciono o no la supe inplementar Espero puedan ayudarme y de antemano agradesco su ayuda. |
Saludote |
Una observación:
El método FindComponent lo que hace es recorrer toda la lista de componentes del formulario hasta encontrar uno con el nombre indicado. En un ciclo como el descrito se estaría haciendo este recorrido 100 veces, una por cada iteración. // Saludos |
Gracias por tu respuesta Lepe pero me esta marcando incompatibilidad
[Error] Unit1.pas(35): E2010 Incompatible types: 'TCheckBox' and 'TComponent' en la linea: check := Findcomponent('Checkbox'+inttostr(i)); //Este es el codigo procedure TForm1.FormCreate(Sender: TObject); var check:TcheckBox; var i:integer; begin for i:=0 to 100 do begin check := Findcomponent('Checkbox'+inttostr(i)); if check <> nil then begin // codigo trabajo end; end; end; Tendras alguna sugerencia gracias. |
Trata con esto:
Saludos... |
Una pequeña modificación:
En donde dice Check := Components[i] as TCheckBox; sería mejor poner Check := TCheckBox(Components[i]); El operador as implícitamente hace uso del operador is lo cual es innecesario porque ya se verificó antes. Y una observación (a ver si repitiendo causa algún efecto): este código de maeyanes es mucho más recomendable que el uso de FindComponent ya que se hace el recorrido de los componentes del formulario una sólo vez y no multiplicado por 100. // Saludos |
Gracias Roman, no sé en que estaba pensando o:
Solo un detalle.... Estas en el OnCreate del Form, en este evento puede que los checkboxes no se hayan construido :confused: Un saludo |
Por cierto, me di cuenta que puse Check := Components[ I ] is TCheckBox en lugar de as... :P
|
Pues no. Veo que ni reiterando quieren omitir el uso de FindComponent.
Una de las pocas (muy pocas) cosas en las que me gustaba más VB son sus arreglos de componentes con lo cual sería mucho más fácil trabajar en estos casos. Dicha esta barbaridad, veamos cómo podemos arreglárnoslas con Delphi. En el formulario declaren el arreglo necesitado:
En el constructor del formulario usen el código de maeyanes pero para llenar el arreglo:
Entonces, para el resto de la aplicación se dispondrá de un arreglo de check boxes mucho más fácil de manipular las veces que sea necesario:
// Saludos |
Cita:
Hasta luego. ;) |
Cita:
// Saludos |
Cita:
Hasta luego. ;) |
Gracias
Muchas gracias a todos funciono muy bien
:D :D :D |
Cita:
// Saludos |
Jajajajaja, use la de maeyanes con tu modificacion en:
Check := TCheckBox(Components[i]); todo funciono excelente gracias por el apoyo!! :) :) |
Una mas...
Gracias, ya lo estoy aplicando en uno de mis códigos, este código me pone en false la propiedad checked de mis checkbox, que son como 30.
:confused: ¿Como le hago para decirle que quiero que solamente lo aplique del checkbox16 al checkbox24?, para no tener que utilizar el FindComponent. Saludos. ;) Vicente López. |
Podrías asignar a cada CheckBox el número que le corresponda en su propiedad Tag (esto en el inspector de objetos) y cambiar la condición a:
// Saludos |
:) Muchas gracias lo voy a intentar.:)
Saludos. Vicente López. |
Hola a todos, tenia el mismo problema, no conseguia limpiar los checkbox que estaban en un GroupBox con un bucle, y al ver este hilo halle la solucion, dejo mi funcion por si alguien la necesitara:
si alguien ve algun error o mejoria por favor me lo comente gracias |
Puede abreviarse de este modo, ya que la variable ChildControl está de mas:
Hasta luego. ;) |
La franja horaria es GMT +2. Ahora son las 00:32:01. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi