Skip to main content

El fill envia dades al pare

En un desenvolupament clàssic d'interfícies: el fill realitza una acció (com pitjar un botó o escriure un text) i el pare ha d'assabentar-se'n per actualitzar, per exemple, una StatusStrip (barra d'estat) comuna. En VB.NET 10, la manera més elegant i "neta" de fer-ho és mitjançant la propietat MdiParent, però fent un Casting (conversió de tipus) per poder accedir a les propietats específiques del formulari pare.

Formulari Pare (frmPrincipal)

Primer, necessitem que el pare tingui alguna cosa per actualitzar.

  1. Afegim un control StatusStrip al formulari pare.

  2. Dins de l'StatusStrip, afegeix un ToolStripStatusLabel i anomena'l lblEstat.

  3. Molt important: Perquè el fill pugui modificar aquest label, hem de crear un mètode públic al pare.

Dins del codi de frmPrincipal.vb:

VB.Net
Public Class frmPrincipal

    ' Mètode públic que els fills podran cridar
    Public Sub ActualitzarBarraEstat(missatge As String)
        lblEstat.Text = "Última acció des d'un fill: " & missatge
    End Sub

End Class

El Fill envia la informació (frmFill)

Ara anem al formulari fill. Imaginem que tenim un TextBox i un Button. Quan l'usuari cliqui el botó, el text del TextBox s'enviarà a la barra d'estat del pare.

Dins del codi de frmFill.vb:

VB.Net
Public Class frmFill

    Private Sub btnEnviarAlPare_Click(sender As Object, e As EventArgs) Handles btnEnviarAlPare.Click
        ' 1. Necessitem "trobar" el pare. 
        ' La propietat Me.MdiParent ens dona el pare, però el sistema el veu com un "Form" genèric.
        
        ' 2. Fem un "Cast" per dir-li a VB que el pare és del tipus 'frmPrincipal'
        ' D'aquesta manera podrem veure el mètode 'ActualitzarBarraEstat'
        Dim elMeuPare As frmPrincipal = CType(Me.MdiParent, frmPrincipal)

        ' 3. Comprovem que el pare existeix (per seguretat) i enviem la info
        If elMeuPare IsNot Nothing Then
            elMeuPare.ActualitzarBarraEstat(txtInformacio.Text)
        End If
    End Sub

End Class
  • Me.MdiParent: Visual Basic sap que hi ha un pare, però no sap quins botons o etiquetes té (només sap que és una finestra).

  • CType(..., frmPrincipal): Li diem al programa: "Tracta aquest pare genèric com si fos el meu formulari específic anomenat frmPrincipal". Només llavors apareixerà el mètode ActualitzarBarraEstat a l'IntelliSense.


Flux de dades

Direcció Mecanisme recomanat Concepte Clau
Pare → Fill Propietats públiques del fill. Inicialització abans del .Show().
Fill → Pare CType(Me.MdiParent, TipusPare). Accés a mètodes públics del contenidor.
Altres exemples d'ús
  • Quan el formulari fill es tanqui (esdeveniment FormClosing), enviï un missatge al pare dient: "La finestra [Títol] s'ha tancat". Això ens obliga a utilitzar el CType dins d'un esdeveniment de tancament.