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 :

[VB .Net][Forms] Interaction entre deux forms


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Points : 32
    Points
    32
    Par défaut [VB .Net][Forms] Interaction entre deux forms
    Bonjour,

    Avant d'aller plus loin, j'ai déjà lu les post suivants :
    - [Résolu] [C#] Acceder à la méthode d'une autre form
    http://www.developpez.net/forums/vie...iable&start=15

    - [Résolu] [VB.NET] Portée des composant - Truc bête
    http://www.developpez.net/forums/vie...E9der+variable

    - [VB.NET]Passage de Parametre entre WinForm
    http://www.developpez.net/forums/vie...380557&start=0

    J'ai deux forms dans mon applications, Form1 qui ait lancé à l'execution de l'appli et SelectForm qui est lancée par Form1:

    Dans Form1 j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Public dialForm As Form = New SelectForm
        Public DATA_REP As String = "D:\_Jerome\Projets\Visa\VisaLight\don"     ' Répertoire des données VISA Light
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Private Sub B_Settings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_settings.Click
     
            dialForm.ShowDialog()
     
        End Sub

    Dans SelectForm, j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        Private repertoire_fichier As String
        Private type_periode As Integer
        Public toto As String
     
    ...
     
        Public Function getDataDir() As String
            Return Me.repertoire_fichier
        End Function
     
        Public Function getTypePeriode() As Integer
            Return Me.type_periode
        End Function

    J'aimerais pouvoir faire dans Form1, après avoir validé SelectForm, c'est
    DATA_REP = dialForm.getDataDir()


    Question annexe:
    un Close sur une Form est ce que ça détruit (désalloue) toutes les variables qu'elle contient ?

  2. #2
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    un Close sur une Form est ce que ça détruit (désalloue) toutes les variables qu'elle contient ?
    si le dispose est appelé oui, et c'est normalement le cas...


    pour ton problème, tu dis avoir lu les autres post sur ce sujet et c'est tout à ton honneur mais as tu essayé d'appliquer ce qui a été dit ?

    J'aimerais pouvoir faire dans Form1, après avoir validé SelectForm, c'est
    DATA_REP = dialForm.getDataDir()
    Question ? tu veux le faire pendant que la form est ouverte où quand elle est fermée ?

    dans le premier cas, je verrais plutôt le problème à l'envers

    dans SelectForm, je ferais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DATA_REP = Me.repertoire_fichier
    en ayant pris soin de rendre disponible DATA_REP dans SelectForm par les moyen décrits dans les post précédents
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [VB .Net][Forms] Interaction entre deux forms
    Utilises plutôt un accesseur qu'une fonction dans SelectForm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     Private Const repertoire_fichier ="D:\_Jerome\Projets\Visa\VisaLight\don"
     
     '...
     
     Public ReadOnly Property getDataDir() As String
      Get
        Return Me.repertoire_fichier
      End Get
     End Property
    donc ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Public dialForm As Form = New SelectForm()
    Public DATA_REP As String = dialForm.getDataDir()
    Question annexe:
    un Close sur une Form est ce que ça détruit (désalloue) toutes les variables qu'elle contient ?
    Pas de suite necessairement car cela dependra du garbage collector tu peux très bien imposer le dispose après le close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not(Me Is Nothing) Then Me.Dispose(True)
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par neguib
    Utilises plutôt un accesseur qu'une fonction dans SelectForm:
    merci, je ne savais pas que ça existait , l'habitude du Java ...


    Citation Envoyé par Dinytro
    Citation Envoyé par Plasticgoat

    un Close sur une Form est ce que ça détruit (désalloue) toutes les variables qu'elle contient ?
    si le dispose est appelé oui, et c'est normalement le cas...
    ok donc c pour ça que je perdait mes variables, j'ai remplacé par un "hide".

    Citation Envoyé par Dinytro
    pour ton problème, tu dis avoir lu les autres post sur ce sujet et c'est tout à ton honneur mais as tu essayé d'appliquer ce qui a été dit ?
    J'ai essayé mais je suis dans la situation inverse:
    Dans les post, ils essayent d'acceder à un membre de Form1 depuis Form2
    alors que moi j'essaye de d'acceder à un membre de Form2 depuis Form1, après avoir saisie des infos dans Form2 et qu'elle ait été 'fermé'.
    Donc je ne vois pas ce que j'ai à faire, à part mettre mes propriétés de SelectForm en public et créer mon instance de SelectForm dans Form1.

    Citation Envoyé par Dinytro
    en ayant pris soin de rendre disponible DATA_REP dans SelectForm par les moyen décrits dans les post précédents
    tu rends diponible DATA_REP pour selectForm ou tu rends disponible DATA_REP dans SelectForm pour Form1 ?

  5. #5
    Membre averti Avatar de Dinytro
    Profil pro
    Inscrit en
    Août 2003
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 390
    Points : 395
    Points
    395
    Par défaut
    hummm...
    récapitulons : (Je code en C#..je te laisse le soins de traduire)

    ton DATA_REP est déclaré dans Form1 isn't it ?

    Si tel est le cas, il suffit que tu utilise des accesseurs pour cette variables dans Form1 comme le suggerait neguib et comme je te le disais aussi indirectement.

    Dans le constructeur de SelectForm, tu passes l'instances de ta Form1
    ça donnerait un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private Form1 _parent;
    public SelectForm(Form1 parent)
    {
       _parent = parent;
    }
    quelque part dans SelectForm, tu dois renseigner cette variable (DATA_REP) qui correspond d'après ce que j'ai compris à Pour la renseigner, il suffira de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _parent.DATA_REP = Me.repertoire_fichier
    (on peut se demander du coup si Me.repertoire_fichier est bien utile...

    dans form 1, pour créer ta form (aller, je me force, un peu de VB


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Public dialForm As Form = New SelectForm(me)
    c'est bon là ?
    Un problème sans solution est un problème mal posé. (Albert Einstein)

    Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité (Albert Einstein)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    ok ça me parait clair

    J'ai fait quelques modification car je n'aimais pas le fait de garder une form en mémoire tous le temps et faire des showdialog/hide.

    Donc, avec vos remarques, maintenant j'ai :
    Form1 :
    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
     
        Private mySettings As Form
     
        Private repertoire_fichier As String = "D:\ ..."
        Private type_periode As Integer = 1
     
      ...
     
        Private Sub B_Settings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_settings.Click
     
            mySettings = New SettingsForm(Me)
            mySettings.ShowDialog()
            'mySettings.Dispose()
        End Sub
     
    ...
     
        Public Property typePeriode_prop() As Integer
            Get
                Return Me.type_periode
            End Get
            Set(ByVal Value As Integer)
                Me.type_periode = Value
            End Set
        End Property
     
     
        Public Property dataDir_prop() As String
            Get
                Return Me.repertoire_fichier
            End Get
            Set(ByVal Value As String)
                Me.repertoire_fichier = Value
            End Set
        End Property
    et dans ma SettingsForm :
    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
     
     
        Private parent_form As Form
     
        Public Sub New(ByVal parent As Form)
            MyBase.New()
     
            Me.parent_form = parent
     
            'Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
            Me.initialisationForm()
        End Sub
     
    ...
        Friend WithEvents TB_data_dir As System.Windows.Forms.TextBox
    ...
     
        Private Sub B_OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_OK.Click
            saveSettings()
            Me.Close()
            If Not (Me Is Nothing) Then Me.Dispose(True)
            'Me.Hide()
        End Sub

    Je pensais donc pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Me.TB_data_dir.Text = Me.parent_form.dataDir_prop()
    ...
    Me.parent_form.dataDir_prop = Me.TB_data_dir.Text
    malheureusement, les propriété n'apparaissent pas dans la liste de Me.parent_form

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    normal tu aurais dû declarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private parent_form As Form1
    Public Sub New(ByVal parent As Form1)
    //...
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    la voilà l'erreur

    merci !

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

Discussions similaires

  1. Interaction entre deux forms Visual Studio
    Par pagugu dans le forum C++
    Réponses: 9
    Dernier message: 24/02/2011, 10h43
  2. basculer entre deux form?
    Par UnSofteuxAmateur dans le forum Windows Forms
    Réponses: 9
    Dernier message: 04/07/2007, 12h35
  3. [VB]Relation entre deux form.
    Par dann dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 20/03/2006, 09h07
  4. [VB.NET] Passer une valeur de control entre deux form
    Par TheMacleod dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/12/2005, 11h07
  5. [VB.NET] Perte de focus entre deux form
    Par toniolol dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/07/2005, 08h00

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