Tutorial Visual Basic | Capítulo 9 - Formularios MDI

El siguiente ejemplo es un editor de texto muy simple utilizando un formulario Mdi, y formularios secundarios o hijos para cada archivo de texto, es decir similar a como lo hace el Word u otras aplicaciones que utilizan múltiples documentos


1 - Pasos para crear el ejemplo:

Iniciar un nuevo proyecto Exe, añadir un formulario MDI y dejarlo por defecto con el nombre Mdi Form1. También agregar un formulario y renombrarlo a FrmDocumento
Las opciones que tendrá el editor serán:
  1. En el menú Archivo: Abrir, Nuevo, guardar , guardar como y salir
  2. El menú Edición : Copiar, Cortar, Pegar y seleccionar Todo.

La vista de los menúes quedará similar a los siguientes gráficos:

El menú Archivo:
vista del menú Archivo en el Mdi

El menú Edición:
vista del menú Edición en el Mdi

Los nombres de los menues deberán ser los siguientes:
Menú Archivo:
  1. Abrir: mnuAbrir
  2. Nuevo: mnuNuevo
  3. Guardar: mnuGuardar
  4. Guardar Como: mnuGuardarComo
  5. Salir: mnuSalir

Menú edición
  1. Copiar: mnuCopiar
  2. Cortar: mnuCortar
  3. Pegar: mnuPegar
  4. Seleccionar todo: mnuSeleccionar

Nota: si no sabés como crear los menúes con el editor de visual basic, podés chequear este enlace que explica resumidamente como crear uno:
Crear menúes en visual basic


Ahora hay que especificar en el formulario Mdi, en la propiedad MdiChild, que se encuentre en True, para que de esta manera los formularios se abran dentro de este.
Ahora indicar en el menú Proyectos > Propiedades de proyecto, que el formulario de inicio sea el MDI, en la opción Objecto inicial.

vista de la ventana de visual basic ( Propiedades de proyecto) para establecer el objeto inicial que arrancará al iniciar la aplicación

Luego agregar un control CommonDialog llamado CommonDialog1 en el formulario Mdi y también otro en el formulariofrmDocumento para poder utilizar los Cuadros de diálogo Abrir Archivo y Guardar como. ( El control CommonDialog lo accedés desde el menú proyecto, Componentes > Microsoft Common Dialog Control ).
En el formulario frmDocumento, colocar un control RichTextBox llamado RichTextBox1 y establecerle a este desde la ventana de propiedades, la propiedad Multiline en True, La propiedad Scrollbars en 3. ( opara que muestre Ambas barras de desplazamiento)
Por último colocar un módulo bas al proyecto


Agregar el código fuente a los formularios y al módulo bas


Código fuente a colocar en el Formulario Mdi
 
Option Explicit

Private Sub MDIForm_Initialize()
CommonDialog1.Filter = "Documento de texto|*.txt|Todos los Archivos|*.*"
End Sub

'Menú abrir
Private Sub mnuAbrir_Click()

On Error GoTo errSub

CommonDialog1.ShowOpen

If CommonDialog1.FileName <> "" Then
    Set FrmDoc = New frmDocumento
    
    FrmDoc.Show
    
    ActiveForm.Caption = CommonDialog1.FileName

    ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName

End If

Exit Sub
errSub:

Select Case Err.Number
Case 70
      ActiveForm.RichTextBox1.LoadFile CommonDialog1.FileName
      Resume Next
End Select

End Sub




'Menu Guardar Como
Private Sub mnuGuarcomo_Click()

On Error GoTo errSub

If Forms.Count = 1 Then
   MsgBox "No hay documentos para guardar", vbInformation
   Exit Sub
End If

CommonDialog1.ShowSave

If CommonDialog1.FileName = "" Then Exit Sub
ActiveForm.RichTextBox1.SaveFile CommonDialog1.FileName


Exit Sub
errSub:

Select Case Err.Number
  Case 91
    Resume Next
End Select

End Sub


'Menú para guardar el archivo
Private Sub mnuGuardar_Click()

On Error GoTo errSub

If Forms.Count = 1 Then
   MsgBox "No hay documentos para guardar", vbInformation
   Exit Sub
End If
If InStr(1, ActiveForm.Caption, sCaption) Then
    CommonDialog1.ShowSave
    If CommonDialog1.FileName = "" Then Exit Sub
    ActiveForm.RichTextBox1.SaveFile CommonDialog1.FileName
Else
    ActiveForm.RichTextBox1.SaveFile ActiveForm.Caption
    
End If

Exit Sub
errSub:

Select Case Err.Number
  Case 91
     Resume Next
End Select

End Sub

'Menú nuevo archivo
Private Sub mnuNuevo_Click()
Set FrmDoc = New frmDocumento
  nForms = nForms + 1
  FrmDoc.Caption = sCaption & nForms
  FrmDoc.Show
End Sub

'Menú pegar
Private Sub mnuPegar_Click()
On Local Error Resume Next
ActiveForm.RichTextBox1.SelText = Clipboard.GetText
End Sub

'Menú salir
Private Sub mnuSalir_Click()
Set FrmDoc = Nothing
End
End Sub

'Menu para seleccionar todo el texto
Private Sub mnuSeleccionar_Click()
On Local Error Resume Next

ActiveForm.RichTextBox1.SelStart = 0
ActiveForm.RichTextBox1.SelLength = Len(ActiveForm.RichTextBox1.Text)

End Sub



'Menú Copiar texto
Private Sub mnuCopiar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
End Sub

'Menú cortar texto
Private Sub mnuCortar_Click()
On Local Error Resume Next
Clipboard.SetText ActiveForm.RichTextBox1.SelText
ActiveForm.RichTextBox1.SelText = ""
End Sub

Código fuente a colocar en el formulario frmDocumento
Option Explicit

Public flagGuardar As Boolean


Private Sub Form_Resize()
'Redimensionamos el control RichtextBox al ancho y alto del formulario
RichTextBox1.Move ScaleLeft, ScaleTop, ScaleWidth, ScaleHeight
If WindowState = vbMaximized Then
   'mdiform1.Caption = Me.Caption
Else
   mdiform1.Caption = ""
End If
End Sub


Private Sub Form_Unload(Cancel As Integer)

On Error GoTo errSub

Dim ret As Integer

If flagGuardar Then
    ret = MsgBox(" Guardar cambios", vbYesNoCancel)
End If

Select Case ret
    Case vbYes:
    
        If InStr(1, Me.Caption, sCaption) Then
            CommonDialog1.ShowSave
            RichTextBox1.SaveFile CommonDialog1.FileName
        Else
            RichTextBox1.SaveFile Me.Caption
        End If
    Case vbCancel:
         Exit Sub
End Select

Set FrmDoc = Nothing


Exit sub
errSub:

Select Case Err.Number
  Case 75
   Resume Next
   
End Select

End Sub

Private Sub RichTextBox1_Change()
flagGuardar = True
End Sub
   

Código fuente a colocar en el Módulo bas
Public FrmDoc As frmDocumento
Public nForms As Integer

Public Const sCaption = "Nuevo documento sin título "



En este enlace está el código fuente para descargar del proyecto anterior, que incluye una barra de herramientas para las opciones ( abrir, guardar etc.. ) y un cuadro de buscar y reemplazar para los documentos

vista previa del mdi





Nota. Si querés poder añadir en el menú archivo del formulario Mdi, la lista de los archivos abiertos recientemente por el programa ( como lo hacen muchas aplicaciones que utilizan formularios MDI, como por ejemplo el Word, o inicluso el Visual basic ), podés ver este ejemplo que graba en el registro de windows las rutas de los ficheros, y al cargar crea en forma dinámica los menúes en tiempo de ejecución. Luego al hacer click en el elemento del menú se ejecuta el archivo
Por ejemplo como muestra esta imagen:

vista del menú del formulario Mdi mostrando la lista de archivos abiertos recientemente por la aplicación

Crear lista de archivos recientes en un menú


Comentarios

Entradas populares de este blog

Como hacer un planeador en madera de balso

Como hacer un espectacular velero en madera de balso