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: [code]
Private formulariosAbiertos As New FormMAESTRO[]
Private activeForm As FormMAESTRO
' Evento GotFocus para cada formulario
Public Sub Form_GotFocus()
activeForm = Me
End
Public Sub menuSAVE_Click()
If activeForm = Null Then
Return
End If
If activeForm.Dialog.Path = "" Then
guardarComo(activeForm, True)
Else
File.Save(activeForm.Dialog.Path, activeForm.TextEditor.Text)
End If
End Sub
Public Sub menuSAVE_AS_Click()
guardarComo(True)
End
Public Sub guardarComo(formulario As FormMAESTRO, local As Boolean)
formulario.Dialog.Title = "Guardar como..."
formulario.Dialog.Filter = ["*.tex", "Archivos LaTeX", "*.adoc", "Archivos Asciidoc", "*.md", "Archivos Markdown"]
If formulario.Dialog.SaveFile() Then
' Proceso cancelado por el usuario
Return
Else
If formulario.Dialog.Path = "" Then
Message.Info("El archivo no tiene un nombre válido.")
Return
End If
If local Then
File.Save(formulario.Dialog.Path, formulario.TextEditor.Text)
' Actualizar el título del formulario con la nueva ubicación
formulario.Title = formulario.Dialog.Path
Else
' Otras acciones a resolver
Endif
Endif
End
[/code]
y el código que utilizo para abrir las diferentes instancias y guardarlas en una lista es
Código: Public Sub menuABRIRarch_Click()
Abrir(True)
End
Public Sub Abrir(local As Boolean)
Dim cadena As String
Dialog.Title = "Escoger archivo"
Dialog.Filter = ["*.tex", "Archivos LaTeX", "*.adoc", "Archivos Asciidoc", "*.md", "Archivos Markdown"]
If Dialog.OpenFile() Then
' Proceso cancelado por el usuario
Return
Else
If Dialog.Path = "" Then
Message.Info("El archivo no tiene un nombre válido.")
Return
End If
If local Then
cadena = File.Load(Dialog.Path)
Dim newForm As New FormMAESTRO
newForm.TextEditor.Text = cadena
newForm.TextEditor.SetFocus
newForm.Show
newForm.Title = Dialog.Path
' Añadir el formulario a la matriz de formularios abiertos
formulariosAbiertos.Add(newForm)
Else
' Otras acciones según sea necesario
Endif
Endif
End
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:
Código: Private k As Integer
Public Sub ToolButton1_Click()
Dim frm As FEditor
frm = New FEditor(Panel2)
With frm
.Tag = k
.Name = CStr(k)
End With
End
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
Código: Public Sub menuARCHnuevo_Click()
Dim nuevoFormulario As New FormMAESTRO ' Crea una nueva instancia del formulario
nuevoFormulario.Show() ' Muestra el nuevo formulario
End
|