PDA

Ver la Versión Completa : ListView y herencia


NeoTrooper
06-11-2007, 17:28:12
Hola!
Quieria preguntar si es posible y si es asi como :)

Tengo un ListView en Heredado de padre, y contiene unos valosres ya insertados en padre, pero no me los muestra en en formulario padre, sabeis porque ?

Gracias.

NeoTrooper
06-11-2007, 17:51:16
Especifico un poco mas.
Si Creo un ListView y hago Herencia de este formulario, SI que me apareceran valores que estan en padre, pero como toco o elimino algo en hijo, por mucho que borre todos los items no me vuelve a cargar lo que tiene padre.
Es como hacer un refresco que no hace.

dec
06-11-2007, 21:21:26
Hola,

Habría que ver cómo estás haciendo "la herencia". Y si realmente se trata de eso. Personalmente, no consigo entender bien qué sucede, ni hablar de porqué sucede así. Lo que a lo mejor ayudaría es que pusieras algo de código, o que explicaras punto por punto lo que quieres hacer, estás intentando hacer o necesitas hacer. No te cortes. Aquí no se cobra por palabras, así que, trata de explicarte un poco mejor y verás que algún compañero puede echarte una mano.

NeoTrooper
07-11-2007, 09:33:44
Trabajo con Delphi 5
Creo formulario : Form1
voy a New--> Project1, asi hago herencia de Form1
Se me crea un Form2.

Pongo un LisView en Padre (aparece en en hijo efectivamente)
Modificando propiedades como me iran bien y añadiendo algun valor para probar. (otra vez en hijo sale igual que en padre) hasta aqui todo bien.

Entonces si añado algun valor o modifico ListView heredado en el hijo, no vuelve nunca a heredar los datos del ListView de Formulario padre. (borando todos los items del hijo en esperanza que si no hay nada en hijo cargara items de padre)

La unica manera de cargarlo otra vez que he conseguido es ir a View As Text de formulario hijo y quitar Linia que pone Data:{...} de ListView.
Entonces El hijo vuelve a cargar datos (items) del padre.

Ahora mi pregunta (que ha canviado desde primer post =)):
Hay alguna manera de decir al ListView de formulario hijo que me vuelva a cargar datos del padre sin ir a View As Text (dfm?). Alomejor hay algun propiedad hide o algo de por estilo que no me doy cuenta.

dec
07-11-2007, 10:12:49
Hola,


(...) Entonces si añado algun valor o modifico ListView heredado en el hijo, no vuelve nunca a heredar los datos del ListView de Formulario padre. (...)


Y cómo añades los items en el "ListView" del formulario heredado (o hijo), ¿estamos hablando del tiempo de diseño o del tiempo de ejecución?

NeoTrooper
07-11-2007, 11:02:50
Diseño. Con Items editor.

dec
07-11-2007, 11:14:50
Hola,

Acabo de tratar de "reproducir" el problema, pero, no he podido. He creado un proyecto, y, en su formulario principal he añadido un "TListView" al que a su vez he añadido un "item". A continuación he creado un nuevo formulario heredándolo del primero, y, he añadido otro "item" al "TListView". Y todo va bien, es decir, como se espera: el "TListView" del segundo formulario muestra el "item" añadido en el formulario "padre" y el "item" que añadí (en tiempo de diseño) en el formulario "hijo".

Algo se escapa por ahí...

PD. He usado Delphi 2007 for Win32.

NeoTrooper
07-11-2007, 11:27:05
el "TListView" del segundo formulario muestra el "item" añadido en el formulario "padre" y el "item" que añadí (en tiempo de diseño) en el formulario "hijo".


Hasta aqui llego yo tambien, esto esta bien. ahora si, con todo esto que has hecho, intenta eliminar todos los componentes del "hijo" y añade 1 mas en padre, que es lo que quiero es que me vuelva a cargar los de "padre". En canvio se queda en blanco, ya que se ve que 1 vez modificando Data:{} de hijo no se volvera a cargar de padre, pero alomejor hay algun manera, aparte de ir a DFM a quitarselo.

dec
07-11-2007, 11:42:53
Hola,

A ver. Cuando heredas el "TListView" estás heredando un objeto "completo" y por decirlo así independiente. Si tú haces cambios en el objeto padre, estos cambios se evidenciarán en el hijo (*), porque el hijo hereda del padre, esto es lógico, ¿verdad? Pero, si haces cambios en el objeto hijo... pasa lo que tiene que pasar: los cambios persisten, porque, el objeto hijo no deja de ser independiente.

Así que lo que ocurre no es un error, sino que es lo que se espera que pase. Tú heredas los "items" del objeto padre, pero, si borras dichos "items" en el objeto hijo, ¿quién es el objeto padre para añadir de nuevo los "items"? Ya lo hizo en un principio, así que si el hijo quiere deshacerse de ellos... es problema del hijo. ¿No?

(*) Ojo, los cambios se evidenciarán en el hijo si este no ha sido creado previamente. Se entiende que los cambios en el padre (una vez en tiempo de ejecución) no afectarán al objeto hijo, puesto que este es ya un objeto aparte.

NeoTrooper
07-11-2007, 11:59:50
así que si el hijo quiere deshacerse de ellos... es problema del hijo. ¿No?

Si, tienes toda la razon, la rpegunta es, hay alguna manera de decirle que me vuelva a cargar lo que tiene padre ?
Ya que imaginemos que lo habia modificado o borrado 1 elemento sin querer.

dec
07-11-2007, 12:05:28
Hola,

Pues... me temo que no exista forma, al menos tal y como planteas el asunto. O tal vez algún otro compañero pueda decir algo al respecto. En mi opinión, y, sin saber muy bien qué trata de conseguirse, cuál es el objeto de todo esto, pienso, a bote pronto, que existen otras formas de hacer "persistir" información.

Por ejemplo, si es preciso que un determinado "TListView" pueda "recuperar" sus datos originales, bastaría con guardar la información en un archivo, por ejemplo, con la información que nos interese, de modo que podamos luego recuperarla cuando nos sea precisa. Lamento no poder decir otra cosa, pero, tal vez lo dicho te ayude en algo.