alberto-moyano   26-05-2023, 20:35
#1
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
Última modificación: 26-05-2023, 20:38 por alberto-moyano.
tincho   26-05-2023, 22:51
#2
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
[Imagen: 9T9RkBu.png]
Archivos adjuntos
.gz
sample-instantiating-a-form-0.0.1.tar.gz (Tamaño: 12.07 KB Descargas: 1)

1 Saludo.
alberto-moyano   26-05-2023, 23:11
#3
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
Última modificación: 27-05-2023, 02:17 por alberto-moyano.
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.