Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

¿ TableView soporta método Insert en una celda ?
#1

Buenas!.

TextBox soporta el método Insert para escribir en el lugar del cursor del ratón.
Mi idea era cambiar a mayúscula o convertir a mayúsculas lo que se escriba, en este caso solo un carácter y parar el evento.
Esto lo hago en un TextBox.

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   With TextBox1
  4.     .Font = Font["Mono noto,Bold, 24"]
  5.  
  6.  
  7. Public Sub TextBox1_KeyPress()
  8.  
  9.   TextBox1.Insert(Upper(Key.Text))
  10.  



Pero en un TableView no veo la forma adecuada.

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   With TableView1
  4.     .Rows.Count = 15
  5.     .Columns.Count = 1
  6.     .Font = Font["Mono noto, Bold, 24"]
  7.  
  8.  
  9.  
  10. Public Sub TableView1_Click()
  11.  
  12.   TableView1.Edit
  13.  
  14.  
  15.  
  16. Public Sub TableView1_Save(Row As Integer, Column As Integer, Value As String)
  17.  
  18.   If Len(TableView1.Current.Text) >= 1 Then
  19.     Stop Event
  20.   Else
  21.     TableView1[Row, Column].Text = Upper(Value)
  22.  
  23.  



El texto continua escribiéndose y al pulsar intro se convierte a mayúscula.
Probablemente diréis que por que no uso el evento KeyPress, no me soluciona mucho.
Algo así tampoco muestra la letra pulsada en la celda.

GAMBAS
  1. Public Sub TableView1_KeyPress()
  2.  
  3.   Message.Info("La tecla pulsada es: " & Key.Text)
  4.  



En la ayuda de Gambas dice que soporta Insert, pero no parece el mismo comportamiento que TextBox.
 
Cita: 
This event is raised when the user requested an insertion by hitting the RETURN key inside the bottom-right cell.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

Tableview dispone de la propiedad "Editor" que es una referencia al control que se esté utilizando para edición (textbox o combobox). Deberías poder hacer con ella lo mismo que con un textbox individualizado.
Es cosa de probar

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#3

(29-12-2022, 14:04)Shordi escribió:  Tableview dispone de la propiedad "Editor" que es una referencia al control que se esté utilizando para edición (textbox o combobox). Deberías poder hacer con ella lo mismo que con un textbox individualizado.
Es cosa de probar

Estoy en ello. Por eso estuve con el ejemplo del textbox para que solo permitiese la pulsación de una sola tecla.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#4

La solución es con el apoyo de un observador para el control TextBox interno.

GAMBAS
  1. ' Gambas class file
  2.  
  3. Private masdeuncaracter As Boolean
  4. Private miobservador As Observer
  5.  
  6. Public Sub Form_Open()
  7.  
  8.   With Me
  9.     .w = 170
  10.     .h = 170
  11.     .Center()
  12.  
  13.   tb = New TableView(Me) As "ManipulaTabla"
  14.   With tb
  15.     .Rows.Count = 5
  16.     .Columns.Count = 1
  17.     .Font = Font["Noto Mono, Bold 24"]
  18.     .W = 150
  19.     .H = 150
  20.     .Left = 10
  21.     .Top = 10
  22.  
  23.  
  24.  
  25. Public Sub ManipulaTabla_Click()
  26.  
  27.   Dim tbxeditor As TextBox
  28.  
  29.   tb.Edit()
  30.   tbxeditor = tb.Editor
  31.   miobservador = New Observer(tbxeditor) As "ManipulaCTexto"
  32.  
  33.  
  34. Public Sub ManipulaTabla_Save(row As Integer, column As Integer, value As String)
  35.  
  36.   tb[row, column].text = value
  37.  
  38.  
  39. Public Sub ManipulaCTexto_Change()
  40.  
  41.   If Len(Last.text) >= 1 Then masdeuncaracter = True
  42.  
  43.  
  44. Public Sub ManipulaCTexto_KeyRelease()
  45.  
  46.   masdeuncaracter = False
  47.  
  48.  
  49. Public Sub ManipulaCTexto_KeyPress()
  50.  
  51.   If masdeuncaracter Then
  52.     Stop Event
  53.   Else
  54.     Last.Insert(Upper(Key.Text))
  55.     Stop Event
  56.  



El problema que tenía es como manipular los eventos la caja de texto interno del TableView.

Os subo el ejemplo. El efecto que quería lograr es el mismo que hice hace poco con la caja de texto, que permitiese escribir solo un carácter cada vez que pulsamos
una tecla.

Saludos

Y si cambiamos el evento KeyPress por este, ya no puede escribirse más de un carácter en cada celda.

GAMBAS
  1. Public Sub ManipulaCTexto_KeyPress()
  2.  
  3.   If masdeuncaracter Or Len(Last.text) >= 1 Then
  4.     Stop Event
  5.   Else
  6.     Last.Insert(Upper(Key.Text))
  7.     Stop Event
  8.  




Archivos adjuntos
.gz PropiedadEditorTableView-0.0.2.tar.gz Tamaño: 12.03 KB  Descargas: 0

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#5

Y si lo cambias por este tampoco:

GAMBAS
  1. Public Sub TextBox1_KeyPress()
  2.  
  3.   If String.Len(TextBox1.text) > 0 Then Stop Event
  4.  



... además de no necesitar masdeuncaracter ni nada más. Con eso mi propuesta es:

GAMBAS
  1. ' Gambas class file
  2.  
  3. Private miobservador As Observer
  4. Private tbxeditor As TextBox
  5.  
  6. Public Sub Form_Open()
  7.  
  8.   With Me
  9.     .w = 170
  10.     .h = 170
  11.     .Center()
  12.  
  13.   tb = New TableView(Me) As "ManipulaTabla"
  14.   With tb
  15.     .Rows.Count = 5
  16.     .Columns.Count = 1
  17.     .Font = Font["Noto Mono, Bold 24"]
  18.     .W = 150
  19.     .H = 150
  20.     .Left = 10
  21.     .Top = 10
  22.  
  23.  
  24. Public Sub ManipulaTabla_Click()
  25.  
  26.   tb.Edit()
  27.   tbxeditor = tb.Editor
  28.   miobservador = New Observer(tbxeditor) As "ManipulaCTexto"
  29.  
  30.  
  31. Public Sub ManipulaTabla_Save(row As Integer, column As Integer, value As String)
  32.  
  33.   tb[row, column].text = value
  34.  
  35.  
  36. Public Sub ManipulaCTexto_KeyPress()
  37.  
  38.   If String.Len(tbxeditor.text) > 0 Then Stop Event
  39.  



Verás que declaro el tbxeditor como private, menos lío para el compilador a la hora de crear y destruir las referencias al control, pero no por ello mejor que hacerlo local.

Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#6

(30-12-2022, 19:23)Shordi escribió:  Verás que declaro el tbxeditor como private, menos lío para el compilador a la hora de crear y destruir las referencias al control, pero no por ello mejor que hacerlo local.

Al cerrar el formulario debería de liberar las referencias de alguna forma. Más o menos lo que debería hacer Quit.

Gracias por la optimización.

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)