https://foro.gambas-es.org/viewtopic.php?f=1&t=6378
-----------------------------------
Shell
Martes, 16 May 2017, 14:06

Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
Buenas!.

Haciendo un ejemplo de Julio sobre TableView y GridView. Se me ocurrió que se podía obtener
el mismo resultado haciéndolo de distintas formas.

En el mismo formulario existe un GridView y un TableView de esta forma:

 [img]https://foro.gambas-es.org/files/images/768/gridviewytableview.png[/img] 

[b]Forma original[/b]. 

Todo el código en el formulario principal. Para un ejemplo no esta mal ya que lo se trata es explicar 
el funcionamiento y verlo funcionar sin mas.

Ahora se me ocurrió de que se podía crear un modulo para cada uno de los controles y llamarlo.
Pero yo no quería a penas código en el formulario.

Entonces en un modulo que trabaje con el GridView podría tener algo así:

[code linenumbers=false syntax=gambas]
Public Function DefinirGridView(grd As GridView) As GridView
  
  With grd 
    .Header = GridView.Both    
    .Rows.Count = 10
    .Columns.Count = 3
    .Columns[0].Title = "Primera Columna"
    .Columns[1].Title = "Segunda Columna"
    .Columns[2].Title = "Tercera Columna"
    .Columns[0].Width = 120
    .Columns[1].Width = 120
    .Columns[2].Width = 120
    .Font.Name = "Sans"
    .Font.Size = 9
    .Background = 16777215
    .Foreground = 0
  End With
  Return grd  
  
End

Public Function RellenarGridView(grd As GridView) As GridView
  
  Dim a, b As Integer
  
  For a = 0 To grd.Rows.Max
    For b = 0 To grd.Columns.Max
      grd[a, b].Text = "Celda: " & Str(a) & " " & Str(b)
    Next
  Next
  Return grd  
End
[/code]

Como veis en el caso del GridView solo se va a "mostrar" datos.
Pero en cambio si trabajo con el TableView y quisiera crear un modulo.
Parte de los eventos del control tengo que hacerlo en el formulario. ¿ Verdad ?.

Ya que en el TableView voy a usar:
- Click
- Save

Eso no lo puedo poner en el modulo.  :evil: 

Volvemos a situar parte de código en el modulo y algo más en el formulario principal.  :sad: 

Así que digo. Voy a heredar un tableview y crear una clase.
Dicho y hecho.

Quedando casi tres o cuatro líneas en el formulario que maneja el TableView.

Pero ahora bien. Ahora viene la pregunta!.  :o 

Y si yo en [b]vez de crear de cero[/b] el TableView con una clase.
Quisiera pasarle a esa clase mi objeto que tengo en el formulario. 
Y esta clase me devuelva el objeto con unas propiedades fijas en la clase.

¿ Eso es posible ?
¿ Es una forma adecuada ?.

Saludos


-----------------------------------
shordi
Martes, 16 May 2017, 16:20

Re: Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
Sin estudiar a fondo el tema... no.
No es buena cosa mezclar módulos con clases. Un módulo es lo que es (una clase pública estática y no instanciable).

Si heredas una clase de Gridview y quieres que se auto-configure de una manera concreta, añade una propiedad como un array o colección de parámetros y que en su procedimiento _init() se configure según ellos. Pero eso de que un módulo tejemanejee las tripas de una clase interna de un formulario, etc... no sé, no me cuadra. Los módulos no están para eso.

Saludos


-----------------------------------
jsbsan
Martes, 16 May 2017, 20:04

Re: Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
Shell:

[quote]Y si yo en vez de crear de cero el TableView con una clase.
Quisiera pasarle a esa clase mi objeto que tengo en el formulario. 
Y esta clase me devuelva el objeto con unas propiedades fijas en la clase.

¿ Eso es posible ?
¿ Es una forma adecuada ?.
[/quote]

Si, creo que se puede usar el patron visitador:
http://jsbsan.blogspot.com.es/2013/11/patron-visitor-ejemplo-cliente-y.html


-----------------------------------
shordi
Martes, 16 May 2017, 20:43

Re: Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
No entiendo na, Julio. ¿Dónde aparece el módulo en el ejemplo del Visitador del enlace?... O es que no he entendido a Shell...
Mejor me voy a cenar.

 :roll:  :roll:


-----------------------------------
tincho
Martes, 16 May 2017, 21:27

Re: Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
Ya cuando se ponen con las clases y herencias etc etc. como concepto va bien pero en rendimiento no me convence.
En el uso de datos de una base para mostrar en un tableview, gridviws etc. lo que mejor me funciono fue el gridview con el código en el mismo formulario (su clase) y no en una clase a parte.

Saludos.


-----------------------------------
Shell
Miercoles, 17 May 2017, 13:51

Re: Diferentes Formas De Obtener El Mismo Resultado Haciendolo De Distintas Formas
-----------------------------------
Buenas!.

Usar directamente un patrón puede complicarse mucho y quizás no sea tan necesario
para el problema que planteo. Puede que no lo haya planteado de la mejor forma.

No me gusta hacer algo de una forma al pie de la letra, ya que anula la creatividad del programador.
No somos máquinas, ni actuamos como las mismas. Primero se debe siempre crear algo y verlo
funcionar con las ideas del programador, mejorarlo y por último comprender y usar un método mejor.

Saludos


