Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Comporamiento Extraño En TableView
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Comporamiento Extraño En TableView 
 
Hola a todos,

Me he encontrado un funcionamiento anómalo en control TableView. Para reproducirlo basta con colocar en un Form un botón (button1) y un Tableview (tav1), en Form.class insertar el siguiente código:

Código: [Descargar] [Ocultar]
  1. Public Sub Form_Open()
  2.  
  3.    Dim iRow As Integer
  4.    Dim iCol As Integer
  5.  
  6.    tav1.Header = GridView.Both
  7.    tav1.Columns.Count = 2
  8.    tav1.Rows.Count = 2
  9.  
  10.    For iCol = 0 To tav1.Columns.Count - 1
  11.       tav1.Columns[iCol].Text = "Columna " & Str(iCol)
  12.    Next
  13.    For iRow = 0 To tav1.Rows.Count - 1
  14.       For iCol = 0 To tav1.Columns.Count - 1
  15.          tav1[iRow, iCol].Text = "Celda " & Str(iRow + iCol)
  16.       Next
  17.    Next
  18. End
  19.  
  20. Public Sub Button1_Click()
  21.    tav1.Clear() 
  22.    tav1.Rows.Count = 0
  23.    tav1.Columns.Count = 0
  24. End
  25.  
  26. Public Sub tav1_Click()
  27.    tav1.Edit()
  28. End
  29.  


Al hacer click en una celda entra en edición y si se hace click en Button1 inmediatamente después el resultado es:
 tableview1

Se limpian las celdas y se borran filas y columnas, pero como estamos en modo edición el TextBox permanece en pantalla. Si volvemos al TextBox y pulsamos ESC se produce un error: "Bad Row Index".
El problema está en que TableView no gestiona el evento externo que se produce al pulsar Button1, y que Clear() es un método del GridView. Si se comenta tav1.Clear(), linea 21, todo funciona normalmente. Si se comentan las dos siguientes, lineas 22 y 23, el programa se queda colgado.

Revisando el código del componente TableView no encuentro manera de evitar el problema, Clear() es un método, no un evento, y con Observer nada se puede hacer. ¿Alguna idea?. Supongo que debe de haber un método mejor de dejar limpio de polvo y paja el TableView.
Si alguien se pregunta como he llegado a encontrar el problema, si se puede llamar así, ha sido por mi ignorancia y porque soy de los que antes de demoler la casa la dejo limpia.

Uso Kubuntu 13.10 64bits, gambas 3.5.2 y gb.gui

Saludos. H.

PD. No he encontrado manera de indentar el código, lo siento.  
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
No entiendo lo que quieres hacer. El programa hace lo que le pides:

Traduciendo: "cuando pulse el botón 1, borra todo el tableview y elimina las filas y columnas. Eso hace.

Por otra parte el tableview contiene un textbox, que ahora mismo tienes visible y activo. Al no hacer nada con él, sigue como está, sólo que ocupando su nuevo tamaño que, en ausencia de ningún otro objeto dentro del tableview-puesto que los has borrado- es todo.

Si lo que quieres, es "suicidar" el tableview, resuelve primero el Edit que tienes en marcha con cancel.
  
    Public Sub Button1_Click()
       tav1.Cancel
       tav1.Clear()
       tav1.Rows.Count = 0
       tav1.Columns.Count = 0
    End


Pero repito: no entiendo qué quieres hacer con el botón.
Saludos.
 



 
última edición por shordi el Miercoles, 12 Febrero 2014, 18:18; editado 2 veces 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Gracias Shordi,

A lo que me refiero es que un control es una como una caja negra, recibe unas órdenes y devuelve unos resultados. Y debería ser autosuficiente en la ejecución de esas órdenes.
Si mando un Clear() al TableView y hay una edición en marcha, debería hacer el Cancel() internamente. Si no puede llegar un ignorante como yo y cascarlo. Que conste que no me quejo, estoy disfrutando como un enano de este invento llamado gambas .

Sigo con la duda, ¿hay alguna manera de interceptar un método en un control cuando el método pertenece a un control heredado?.

Gracias y un saludo. H.
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Y lo que quiero hacer es, como bien dice, "suicidar" el TableView.
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Harpo:

Se me ocurre que podrias crear un control heredado que tuviera la opción de "deshacer" para deshacer la última operación realizada..

O también que aparezca un pequeño formulario, en vez de editar directamente la celda, con un botón de cancelar en el formulario.

Nota:
El control tableview, es un control creado en gambas a partir de un gridviews.
Su codigo fuente lo puedes ver descomprimiento el archivo gambas3-3.5.2.tar.bz2 en la ruta:
gambas3-3.5.2/comp/src/gb.form/.src/TableView.class


Spoiler: [ Mostrar ]



Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Harpo:

Citar:
No he encontrado manera de indentar el código

Si te refieres al ide de gambas, esa opción esta en:
el menu Herramientas/Preferencias/Formateo de código/Formatear al cargar y guardar/Si

 formatear_al_cargar_y_guardar
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Gracias Jsbsan, cuando me refiero a la indentación hablo del código que puesto en el primer mensaje de este post. No he encontrado forma de hacerlo.

Siento la confusión, un saludo. H.
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Citar:

Se me ocurre que podrias crear un control heredado que tuviera la opción de "deshacer" para deshacer la última operación realizada..

O también que aparezca un pequeño formulario, en vez de editar directamente la celda, con un botón de cancelar en el formulario.


Gracias nuevamente Jsbsan. La verdad es que he sido algo más osado. Ya que quería aprender gambas decidí que fuera haciendo algo productivo y me he embarcado en un pequeño programa para conciliar las cuentas bancarias, las tarjetas de crédito y los gastos, cargando las hojas de cálculo del banco, que cada uno te la manda en un formato particular. Decidí usar el TableView para la carga y edición de datos, y eso de que saltara la edición con el evento Click() me ponía nervioso y no podía cambiarlo.

Así que me descargué los fuentes con la intención de ver qué hacía y aprender en el proceso, y fue como oler sangre para un tiburón. El caso que al final, además de un evento DblClick() en el TableView para editar, le he añadido otra docena larga de propiedades, algunas estéticas y otras funcionales. Ahora estoy pensando en embeberle dentro un control MaskBox, a este paso no terminaré el programa en la vida   , y seguiré haciendo el proceso de conciliación a mano, pero habré aprendido un huevo por el camino.

Un saludo, H.
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Citar:
Sigo con la duda, ¿hay alguna manera de interceptar un método en un control cuando el método pertenece a un control heredado?.


No sé muy bien lo que quieres decir. Si te refieres a interceptar el método para que no haga lo que se supone que debe hacer, sólo tienes que definirlo.
Tu código se ejecutará antes que el suyo... o no, porque puedes cancelarlo con un STOP EVENT
Por ejemplo, pulsando una tecla, el código interno del control la dibuja en pantalla, pero si tú defines el método key_release, por ejemplo y tras comprobar que la letra pulsada no es válida, puedes evitar que se muestre en pantalla con un STOP EVENT....

Si lo que quieres es actuar sobre el control contenido dentro de otro (como parece ser en este caso, que quieres actuar sobre el textbox del tableview directamente), siempre puedes acceder a la propiedad Children del control (si es que la tiene) o, a la propiedad que te de acceso al "Sub-Control".
Tableview crea en tiempo de ejecución el control textbox (por lo que no puede figurar entre los Children) cuando disparas el evento Edit. Puedes acceder a ese textbox por la propiedad .Editor del tableview y actuar ahí sobre él.

Y por último, si quieres destruir una instancia de algo... algo=NULL suele funcionar.

Saludos.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Comporamiento Extraño En TableView 
 
Gracias Shordi, a eso me refería. En su momento probé a declarar el método Clean() en el TableView pero no funcionó, supongo que algo haría mal.
He vuelto a probar y va perfecto!!, se ejecuta antes que el del GridView.

Saludos, H.
 



 
Harpo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Comportamiento Extraño En El Componente C... Shell Controles/Librerías/Componentes 2 Miercoles, 29 Febrero 2012, 10:15 Ver último mensaje
Shell
No hay nuevos mensajes Extraño Compartamiento De Las Ventanas En... jsbsan General 14 Viernes, 03 Abril 2015, 16:40 Ver último mensaje
shordi
No hay nuevos mensajes El Extraño Mundo De Los Números Mágicos... viejito General 2 Viernes, 11 Diciembre 2015, 06:48 Ver último mensaje
viejito
No hay nuevos mensajes Extraño Problema Con Tamaños De Formularios Tasagore General 2 Lunes, 04 Abril 2016, 19:56 Ver último mensaje
Tasagore
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron