Comunidad Gambas-es
obtener foco sobre un formulario - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forumdisplay.php?fid=3)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forumdisplay.php?fid=8)
+--- Tema: obtener foco sobre un formulario (/showthread.php?tid=1376)



obtener foco sobre un formulario - alberto-moyano - 26-05-2023

Hola colisteros, no encuentro que hago mal en el siguiente caso. Tengo un formulario (con un editor) que puedo instanciar tantas veces como lo necesite, la cuestión es que cuando quiero guardar cambios en cualquiera de los formularios abiertos, no lo obtengo y solo guarda los cambios en el primero, no entiendo si mi error es de lógica o de código, el código que desarrollé  es el siguiente.

Gracias por cualquier comentario
Código:
GAMBAS
  1. Private formulariosAbiertos As New FormMAESTRO[]
  2. Private activeForm As FormMAESTRO
  3.  
  4. ' Evento GotFocus para cada formulario
  5. Public Sub Form_GotFocus()
  6.  
  7.   activeForm = Me
  8.  
  9.  
  10. Public Sub menuSAVE_Click()
  11.  
  12.   If activeForm = Null Then
  13.     Return
  14.   End If
  15.  
  16.   If activeForm.Dialog.Path = "" Then
  17.     guardarComo(activeForm, True)
  18.   Else
  19.     File.Save(activeForm.Dialog.Path, activeForm.TextEditor.Text)
  20.   End If
  21.  
  22.  
  23. Public Sub menuSAVE_AS_Click()
  24.  
  25.   guardarComo(True)
  26.  
  27.  
  28. Public Sub guardarComo(formulario As FormMAESTRO, local As Boolean)
  29.  
  30.   formulario.Dialog.Title = "Guardar como..."
  31.   formulario.Dialog.Filter = ["*.tex", "Archivos LaTeX", "*.adoc", "Archivos Asciidoc", "*.md", "Archivos Markdown"]
  32.  
  33.   If formulario.Dialog.SaveFile() Then
  34.     ' Proceso cancelado por el usuario
  35.     Return
  36.   Else
  37.     If formulario.Dialog.Path = "" Then
  38.       Message.Info("El archivo no tiene un nombre válido.")
  39.       Return
  40.     End If
  41.  
  42.     If local Then
  43.       File.Save(formulario.Dialog.Path, formulario.TextEditor.Text)
  44.       ' Actualizar el título del formulario con la nueva ubicación
  45.       formulario.Title = formulario.Dialog.Path
  46.     Else
  47.       ' Otras acciones a resolver
  48.     Endif
  49.  


y el código que utilizo para abrir las diferentes instancias y guardarlas en una lista es

GAMBAS
  1. Public Sub menuABRIRarch_Click()
  2.  
  3.   Abrir(True)
  4.  
  5.  
  6. Public Sub Abrir(local As Boolean)
  7.  
  8.   Dim cadena As String
  9.  
  10.   Dialog.Title = "Escoger archivo"
  11.   Dialog.Filter = ["*.tex", "Archivos LaTeX", "*.adoc", "Archivos Asciidoc", "*.md", "Archivos Markdown"]
  12.  
  13.   If Dialog.OpenFile() Then
  14.     ' Proceso cancelado por el usuario
  15.     Return
  16.   Else
  17.     If Dialog.Path = "" Then
  18.       Message.Info("El archivo no tiene un nombre válido.")
  19.       Return
  20.     End If
  21.  
  22.     If local Then
  23.       cadena = File.Load(Dialog.Path)
  24.       Dim newForm As New FormMAESTRO
  25.       newForm.TextEditor.Text = cadena
  26.       newForm.TextEditor.SetFocus
  27.       newForm.Show
  28.       newForm.Title = Dialog.Path
  29.  
  30.       ' Añadir el formulario a la matriz de formularios abiertos
  31.       formulariosAbiertos.Add(newForm)
  32.     Else
  33.       ' Otras acciones según sea necesario
  34.     Endif
  35.  





RE: obtener foco sobre un formulario - tincho - 26-05-2023

Hola Alberto, mira no se como creas la instancia de cada formulario pero hice este ejemplo simple que hace algo parecido a lo que describiste.
EL caso es que cuando creo nuevos formularios copias de editor no funciona si no le asigno un tag y un nombre diferente a cada uno, tal vez sea eso lo que te pasa a vos.
por ejemplo:
GAMBAS
  1.  
  2. Public Sub ToolButton1_Click()
  3.  
  4.   Dim frm As FEditor
  5.  
  6.   frm = New FEditor(Panel2)
  7.   With frm
  8.     .Tag = k
  9.     .Name = CStr(k)
  10.  


[Imagen: 9T9RkBu.png]


RE: obtener foco sobre un formulario - alberto-moyano - 26-05-2023

Gracias Tincho, justo estoy leyendo en la wiki y los tiros vienen por donde lo planteas, el editor no se instancia junto con cada formulario abierto (así lo estoy entendiendo).

Este es el código para la apertura de cada formulario nuevo

GAMBAS
  1. Public Sub menuARCHnuevo_Click()
  2.  
  3.   Dim nuevoFormulario As New FormMAESTRO ' Crea una nueva instancia del formulario
  4.  
  5.   nuevoFormulario.Show() ' Muestra el nuevo formulario
  6.