IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Comment connaître le formulaire ayant ouvert un formulaire?


Sujet :

Windows Forms

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut Comment connaître le formulaire ayant ouvert un formulaire?
    Salut,

    J'ai un formulaire qui me sert à ajouter / modifier des valeurs, "Form1".
    Celui-ci peut être ouvert par différents formulaires, Form2, Form3, Form4, ...

    Comment, à la fermeture de "Form1", savoir quel formulaire l'avait ouvert pour pouvoir appeler une fonction avec quelques paramètres?

    Je connais cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim frmOuvrant As frmNomFormulaire
    frmOuvrant = CType(Me.Owner.ActiveMdiChild, frmNomFormulaire)
    frmOuvrant.NomFonction(Parametre1, Parametre2,...)
    Mais elle impose de connaître le formulaire ouvrant.

    Merci

    Gdal

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Méthode 1 : tu peux passer un paramètre au constructeur (this) qui permettra d'identifier l'appelant qui crée ton formulaire.

    Methode 2 : dans ta méthode "close" ou autre, tu récupères l'appelant sur la pile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StackTrace().GetFrame(1).GetMethod().DeclaringType.Name
    A+
    Claude

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    Citation Envoyé par ClaudeBg
    Méthode 1 : tu peux passer un paramètre au constructeur (this) qui permettra d'identifier l'appelant qui crée ton formulaire.
    --- Mon formulaire B:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Public Class FormB
     
        Private frmOuvrant As Form
     
        Sub New(ByVal frmO As Form)
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            frmOuvrant = frmO
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            frmOuvrant.TestFormBA("FormB")
     
        End Sub
     
    End Class
    --- Mon formulaire A:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Public Class FormA
     
        ' Ouvrir le formulaire B en passant l'instance du formulaire A en paramètre
        Private Sub btOFormB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOFormB.Click
     
            Dim frmFormB As New FormB(Me)
            frmFormB.Show()
     
        End Sub
     
        ' Sub à exécuter par le formulaire B
        Public Sub TestFormBA(ByVal strParam As String)
     
            Me.TextBox1.Text = "Réussi " & strParam
     
        End Sub
     
    End Class

    J'ai essayé mais j'obtiens un message
    "'TestFormBA' n'est pas un membre de 'System.Windows.Forms.Form'"
    sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            frmOuvrant.TestFormBA("FormB")
    du formulaire B.
    Ce qui me semble logique... Mais je ne vois pas quoi faire.

    Gdal

  4. #4
    Invité
    Invité(e)
    Par défaut
    Dans le constructeur de de ta classe FormB il faut mettre le type FormA et non Form comme type de paramètre.

    Par contre je te conseil de créer une classe "FormGenerique" qui héritera de classe Form et qui sera la classe mère de FormA et FormB.
    Dans la classe FormGenerique tu pourras y placer toutes les méthodes communes à tes formulaires comme ta méthode "TestFormBA". (sans oublier qu'il faut passer en paramètre dans ce cas là un type FormGénérique dans le constructeur de FormB) .

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    Public Class FormGenerique
           Inherits Form
     
        Public Sub TestFormBA(ByVal strParam As String)
     
            Me.TextBox1.Text = "Réussi " & strParam
     
        End Sub
     
    End Class
     
     
    Public Class FormB
         Inherits FormGenerique
     
        Private frmOuvrant As FormGenerique
     
        Sub New(ByVal frmO As FormGenerique)
     
            InitializeComponent()
     
            frmOuvrant = frmO
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            frmOuvrant.TestFormBA("FormB")
     
        End Sub
     
     
    Public Class FormA
             Inherit FormGenerique
     
        Private Sub btOFormB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOFormB.Click
     
            Dim frmFormB As New FormB(Me)
            frmFormB.Show()
     
        End Sub
     
     
    End Class

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    Je viens de tester... Mais comment la classe FormGenerique peut-elle accéder à Me.TextBox1.Text?
    Je dois pas tout comprendre.


    Gdal

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Points : 270
    Points
    270
    Par défaut
    Salut,

    J'ai, plus ou moins, contourné le problème:

    Trois formulaires:
    - FormA, ouvre le FormB en modale
    - FormC, ouvre le FormB normalement
    - FormB, ajouter / modifier les valeurs

    --- Formulaire FormA
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class FormA
     
        ' Ouvrir le formulaire B en modale
        Private Sub btOFormB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOFormB.Click
     
            Dim frmFormB As New FormB("FormA")
            frmFormB.ShowDialog(Me)
     
        End Sub
     
    End Class

    --- Formulaire FormC
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Public Class FormC
     
        ' Ouvrir le formulaire B normalement
        Private Sub btOFormB_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOFormB.Click
     
            Dim frmFormB As New FormB ("FormC")
            frmFormB .MdiParent = frmIndex
            frmFormB .ParenteFormC = Me
            frmFormB .Show()
     
        End Sub
     
    End Class

    --- Formulaire FormB
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    Public Class FormB
     
    #Region "Liaison inter-formulaire "
     
        Public frmParenteFormC As frmFormC
        Public WriteOnly Property ParenteFormC() As frmFormC
            Set(ByVal value As frmFormC)
                frmParenteFormC = value
            End Set
        End Property
     
    #End Region
     
        Private frmOuvrant As string
     
        Sub New(ByVal frmO As string)
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            frmOuvrant = frmO
     
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Me.close()
     
        End Sub
     
        ' A la fermeture du formulaire
        Private Sub FormB_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
     
            ' Actualiser le formulaire ouvrant
            Select Case strFormOuvrant
     
                Case "FormA"
     
                    ' Mise à jour de la combobox
                    Dim frmFormA As FormA
                    frmFormA = CType(Me.Owner.ActiveMdiChild, FormA)
                    frmFormA .RemplirCbo()
     
                Case "FormC"
     
                    ' Mise à jour du DataGridView
                    frmParenteFormC.RechargerDgdv()
     
                Case Else
     
            End Select
     
        End Sub
     
    End Class

    Voilà

    Gdal

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment connaître sur quel port ouvert sur ma machine?
    Par sebac dans le forum Général Java
    Réponses: 5
    Dernier message: 23/12/2009, 14h41
  2. Réponses: 6
    Dernier message: 02/03/2009, 05h25
  3. Réponses: 0
    Dernier message: 25/11/2007, 16h48
  4. Réponses: 5
    Dernier message: 14/07/2007, 10h59
  5. [Formulaires] Tester si un formulaire est ouvert
    Par Ithilien dans le forum IHM
    Réponses: 2
    Dernier message: 10/01/2007, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo