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.
-
Afegim un control
StatusStripal formulari pare. -
Dins de l'StatusStrip, afegeix un
ToolStripStatusLabeli anomena'llblEstat. -
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:
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:
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ètodeActualitzarBarraEstata 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. |
- 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 elCTypedins d'un esdeveniment de tancament.