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

VB.NET Discussion :

Calcul des textbox de plusieurs Form


Sujet :

VB.NET

  1. #1
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut Calcul des textbox de plusieurs Form
    Bonsoir. Je vous sollicite pour résoudre un problème.
    J'ai créé un projet où il y a 4 form
    - Form1 avec TextBox1 et Button1
    - Form2 avec TextBox1 et Button1
    - Form3 avec TextBox1 et Button1
    - Form4 avec Label1
    A l'exécusion:
    J'ai Form1 au début, je tape un nombre dans TextBox1 et je clique sur Button1, Form2 apparait, même procédure pour Form2 et Form3.
    Mais ce que je ne sais pas faire c'est avoir dans le Label1 de Form4, la somme de tous les Textbox1.
    Merci de votre aide
    J'apprends la programmation pour le plaisir

  2. #2
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    D'abord
    1 Active option explicit on et option strict on (projet ->proprieté de ton projet > onglet compiler) et recompile ton projet
    si c'est fait tant mieux


    2 tes textbox contiennent des strings donc pour pouvoir faire avec des opértions il faut vérifier s'ils sont numérique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim str As String = "12234"
            Dim str1 As String = "544"
            Dim str2 As String = "888"
            Dim p, p1, p2 As Integer
            Dim sum As Integer
            If Integer.TryParse(str, p) AndAlso Integer.TryParse(str1, p1) AndAlso Integer.TryParse(str, p1) Then
                sum = p + p1 + p2
               label1 = sum.tostring
            End If
    integer.tryparse essaie de convertir un string en type integer et renvoi un boolean true ou false s'il réussit

  3. #3
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Merci shayw, mais peut être que vous n'avez pas compris ce que je veux (ou je suis trop nul pour comprendre votre code).
    Le but est d'avoir dans Label1 de Form4, la somme des nombres saisis dans TextBox1 de Form1, TextBox1 de Form2 et de TextBox1 de Form3
    (Pour TextBox1.text, ne vous en faites pas, il est numérique)
    J'apprends la programmation pour le plaisir

  4. #4
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    J'ai finalement trouvé la solution, mais s'il y a mieux vous me le dites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Form1
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Visible = False
            Form2.Show()
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Form2
     
        Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Show()
     
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Form3.Show()
            Me.Visible = False
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Class Form3
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Visible = False
            Form4.Show()
        End Sub
     
        Private Sub Form3_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form2.Show()
        End Sub
    End Class
    Code : 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 Form4
     
        Private Sub Form4_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form3.Visible = True
     
        End Sub
     
        Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim p = CType(Form1.TextBox1.Text, Integer)
            Dim p1 = CType(Form2.TextBox1.Text, Integer)
            Dim p2 = CType(Form3.TextBox1.Text, Integer)
            Me.Label1.Text = (p + p1 + p2).ToString
        End Sub
    End Class
    J'apprends la programmation pour le plaisir

  5. #5
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Si j'ai compris ce que tu demandes
    (Pour TextBox1.text, ne vous en faites pas, il est numérique)

    regardes ce post http://www.developpez.net/forums/d14...-user-textbox/

  6. #6
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Dans ton code j'étais embrouillé car je ne vois pas d'affectation de p, p1 et p2 aux TextBox . En plus TryParse, je ne la connais pas encore (je suis à mes débuts)
    (Mais il m'a donné l'idée)
    merci
    J'apprends la programmation pour le plaisir

  7. #7
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Quel est le but de mettre plusieurs form ?

    aussi
    à quoi sert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Show()
     
        End Sub

    cette évenement est relevé si fom2.close qui n'est pas form2.visible = false

  8. #8
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    Le but de mettre plusieurs form:
    Nom : psuq.jpg
Affichages : 245
Taille : 13,3 Ko
    en plus de ces contrôle il y a un label invisible qui contiendra 1 si l'utilisateur a coché le bon RadioButon sinon 0.
    Un form pour la France, un autre pour Canada, un autre pour Le Maroc, Israel, Japon ....
    La note de l'utilisateur sera la somme des contenus des label
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Show()
     
        End Sub
    ce code me permet de revenir à Form antérieur(resaisir la réponse par exemple)
    En plus si je ne le fais pas , regarde ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Form1
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Visible = False ' Form1 ne sera plus visible, du coup quand je quitte Form2, Form1 est toujours ouverte devant moi mais invisible, donc inaccéssible, et voilà je suis bloqué.
            Form2.Show()
        End Sub
    End Class
    J'apprends la programmation pour le plaisir

  9. #9
    Invité
    Invité(e)
    Par défaut
    Faire une multitude de Form alors qu'ils se ressemblent tous reste dommage, tu alourdiras pour rien ton projet...
    Ce que je ferais : tu gardes ton Form1 dans lequel tu vas laisser ton Label avec la question, tes 4 boutons radio pour les propositions, un label pour le score (par exemple), mais je rajouterais par exemple 6 combobox cachés.
    L'objectif, c'est que pour une position i donnée, tu vas récupérer dans un combobox la question, dans un autre, la proposition associée 1 à ta question, ..., dans une autre, la proposition 4 associée à ta question, et dans une dernière, un tag te permettant de savoir quel bouton radio contient la réponse.
    Ainsi, quand tu ouvres ton Form1, tes combobox sont positionnées à la ligne 0, une fois la réponse validée, tu incrémentes les lignes de chacune de tes combobox, afin de de passer à la question suivante...
    Pour l'affichage du score, un texte dans un messagebox reste possible?

  10. #10
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    utilise des panels ou groupbox qui sont des control container
    au lieu de form2 mets dans form1 un control panel ou un groupbox et place y tous les controls de form2

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Il existe plusieurs façons de traiter l'ensemble du projet (comme tu peux le voir avec les diverses proprositions d'approche).
    Le but étant d'apprendre et découvrir, je te propose d'utiliser le contrôle TabControl (et ce malgrès quelques contraintes que nous résolverons) et une classe pour les données (pour étendre les connaissances sur la P.O.O.).

    Commençons par la classe, rien de bien sorcier (Form1 est une classe), mais nous allons en créer une qui gérera nos données (pas de partie graphique)
    Afin de faire simple pour déjà appréhender cette classe nous mettrons les données séparées (vu qu'elle sont de même type elles auraient pu être regroupées dans une collection, par exemple un dictionnaire)
    Notre classe contiendra 3 propriétés pour les réponses utilisateurs et une méthode qui nous donnera le résultat (ainsi nous allons créer un objet qui traitera nos données) (rappel un dictionnaire aurait simplifié, mais commençons simplement)
    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
    Public Class clsReponses
     
        Private Reponse1Value As Integer = 0
        Public Property Reponse1() As Integer
            Get
                Return Reponse1Value
            End Get
            Set(ByVal value As Integer)
                Reponse1Value = value
            End Set
        End Property
     
        Private Reponse2Value As Integer = 0
        Public Property Reponse2() As Integer
            Get
                Return Reponse2Value
            End Get
            Set(ByVal value As Integer)
                Reponse2Value = value
            End Set
        End Property
     
        Private Reponse3Value As Integer = 0
        Public Property Reponse3() As Integer
            Get
                Return Reponse3Value
            End Get
            Set(ByVal value As Integer)
                Reponse3Value = value
            End Set
        End Property
     
        Function Resultat() As Integer
            Return Reponse1 + Reponse2 + Reponse3
        End Function
     
    End Class
    Dans notre form (ici Form5), nous déclarons une variable de type "clsReponses" Public LesReponses As clsReponses et nous créons une instance de ce type que nous affectons à la variable (c'est la fin de la ligne = New clsReponses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Class Form5
     
        Public LesReponses As clsReponses = New clsReponses
    Voila un objet qui va nous servir pour travailler

    Créer le tabcontrol avec 4 pages dans le designer (qui sont dans une collection)
    Ce contrôle est pratique pour regrouper des ensembles que l'on souhaite répartir, mais il a un inconvénient. On ne peut pas utiliser la propriété visible des pages, mais on peut contourner le problème.
    Il faut enlever les pages, et les remettre au fur et à mesure des besoins. (attention elle sont placées dans l'ordre d'ajout) (les pages pourraient être enlevées dans une boucle, attention il y a un piège)
    sur le load nous enlevons les pages à cacher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub Form5_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            TabControl1.TabPages.Remove(TabPage2)
            TabControl1.TabPages.Remove(TabPage3)
            TabControl1.TabPages.Remove(TabPage4)
        End Sub
    A chaque validation, nous rajouterons la page si elle n'est pas dans la collection, et nous donnerons le focus à cette page. (nous faisons une méthode pour traiter cela)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Sub selectionnePage(page As TabPage)
            If Not TabControl1.TabPages.Contains(page) Then TabControl1.TabPages.Add(page) ' ajoute la page si elle n'existe pas
            TabControl1.SelectedIndex = TabControl1.TabPages.IndexOf(page) ' donne le focus à cette page        
        End Sub
    Pour chaque validation, nous notons le résultat de la réponse dans notre classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub btnValiderPage1_Click(sender As System.Object, e As System.EventArgs) Handles btnValiderPage1.Click
            If rbParis.Checked Then LesReponses.Reponse1 = 1 Else LesReponses.Reponse1 = 0 ' note la reponse
            selectionnePage(TabPage2)
        End Sub
    idem pour les autres pages.

    Quand nous arrivons sur la dernière page, nous affichons le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub TabPage4_Enter(sender As System.Object, e As System.EventArgs) Handles TabPage4.Enter
            Label1.Text = String.Format("Vous avez {0} bonne(s) réponse(s)", LesReponses.Resultat)
        End Sub
    Comme tu peux le voir, tes données sont bien regroupées dans un objet de travail, et indépendantes des saisies et affichage.

    ________________
    Voyons maintenant comment simplifier le code ; utilisons un dictionnaire et factorisons les parties saisies
    Notre classe contient une variable de type dictionnaire
    A la création le new cré tous les éléments du dico
    Nous avons une propriété pour accéder à un élément du dico par sa clé
    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
    Public Class clsDicoReponses
        Private dicoReponse As Dictionary(Of Integer, Integer) ' collection (clé/valeur) pour stocker les valeurs
        Private NbRep As Integer = 3
     
        Sub New()
            GenereDico()
        End Sub
        Private Sub GenereDico()
            dicoReponse = New Dictionary(Of Integer, Integer)
            For i As Integer = 1 To NbRep
                dicoReponse.Add(i, 0)
            Next
        End Sub
     
        ''' <summary>Une réponse accessible par sa clé (ici sous forme d'index numérique).</summary>
        Public Property Reponse(cle As Integer) As Integer
            Get
                Return dicoReponse(cle)
            End Get
            Set(ByVal value As Integer)
                dicoReponse(cle) = value
            End Set
        End Property
     
        Function Resultat() As Integer
            Dim Reponse As Integer = 0
    ' exercice
     
            Return Reponse
        End Function
     
    End Class
    Exercice : créer la boucle (For Each) qui parcours la collection des valeurs des éléments du dico (...) afin d'en faire la somme.

    Dans la form (création)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class Form5
        Public DicoReponses As clsDicoReponses = New clsDicoReponses
    La mise à jour des réponses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            If rbParis.Checked Then DicoReponses.Reponse(1) = 1 Else DicoReponses.Reponse(1) = 0 ' note la reponse
    Mais comme l'on répète cette ligne faire une méthode (Notereponse) qui reçoit en paramètre si la réponse est correcte (boolean) et la page concernée (integer) et met à jour le dico de la classe. (peut aussi être fait dans l'exemple précédant)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  12. #12
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    il y a du pain sur la planche. Mais c'est une question du temps. Je réagirai quand j'aurais compris tout le code
    Merci à vous
    J'apprends la programmation pour le plaisir

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    La compréhension du code est une étape.
    La méthode pour aborder le problème est aussi importante. Ce qu'il faut retenir dans l'exemple, c'est que nous organisons les données et les traitements de celles-ci dans une classe (qui nous donnera un objet à manipuler). C'est un point important dans l'Orienté Objet.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  14. #14
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    rv26T, merci infiniment.
    Ces exercices et vos codes me permettent d'avancer dans le Tuto de VB.Net. Je viens de lire à peine le 1/3.
    exemple, les TabControl, je ne savais même pas que ça existent. Cette discussion m'a incité à faire une recherche, maintenant je l'ai compris. Autre chose, le peu que j'ai lu sur poo, y compris des exemples;étaient en mode console, et je me demandais toujours, comment est ce en mode graphique? Donc ce code est la 1ère illustration que je vois. Au début le code me paraissait impénétrable, mais finalement le l'ai ben saisi et surtout la méthode d'aborder le problème n' a rien à voir avec ce que je pensais (manque de bagage)
    Maintenant je dois entamer la seconde méthode du Dictionnaire (aussi jamais entendu parler)
    A+
    J'apprends la programmation pour le plaisir

  15. #15
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Lorsque l'on veut gérer plusieurs éléments d'un type donné (groupe d'éléments), on utilise des collections.
    Le dictionnaire est une collection de clé/valeurs. Mais il existe d'autres type de collection, les listes List(of ...), ...

    Dans notre exemple, on utilise des types simples, mais on peut aussi utiliser les collections pour des types plus complexe comme des classes, ...

    Dans notre exemple, nous avons 3 éléments dans notre dictionnaire. Nous pouvons donner plus de souplesse à notre classe "clsReponses"
    En rajoutant un nouveau constructeur (surcharge du constructeur) recevant un paramètre (nombre d'éléments), nous pouvons laisser au programmeur la possibilité de définir le nombre de réponses à gérer, à la création d'une instance de la classe "clsReponses". (plus besoin de modifier la classe si le nombre de questionnaires change)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Sub New(NbReponses As Integer)
            NbRep = NbReponses
            GenereDico()
        End Sub
    Si tu crés un 4ème formulaire de question, il suffit de créer l'instance ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Public DicoAvec4Reponses As clsDicoReponses = New clsDicoReponses(4)
    Le dico contiendra les 4 réponses, et les fonctionnalités de la classe reste opérationnelle. (la méthode "Resultat" renverra le total grace à la boucle For Each)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  16. #16
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    336
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 336
    Points : 227
    Points
    227
    Par défaut
    Si tu veux faire un peu plus simple, tu surcharge le constructeur de tes formulaires un peu à cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Class Form2
        private _maVariable as Integer = 0
        Public Sub New(ByVal nb As Integer)
            InitializeComponent()
     
            Me._maVariable = nb
        End Sub
    End Class
    Ainsi quand tu fera appel à ton formulaire tu poourra passer la valeur de la textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim val as Integer
    Integer.tryparse(textbox1.text,val)
    Dim frm As Form2 = new Form2(val)
    frm.show()

  17. #17
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par dharkan Voir le message
    Si tu veux faire un peu plus simple, tu surcharge le constructeur de tes formulaires un peu à cette manière :
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim frm As Form2 = new Form2(val)
    frm.show()
    Il existe effectivement plusieurs façon de procéder.
    Mais ton approche est à mon avis trop simpliste, comment fais-tu si l'utilisateur revient en arrière sur une fenêtre et change ces choix ? Il va falloir réajuster "val", avec les risques de bug, du code en plus. (Dans le cas d'un enchaînement simple, ta méthode est fonctionnelle, merci pour l'idée. Mais dans cette discussion, on étudie l'approche objet et ses avantages.)

    Dans ce cas il vaut mieux passer la classe "clsReponses" en paramètre, ainsi en cas de retour en arrière la logique continu d'être opérationnelle (l'affectation suffit) sans aucun code supplémentaires. (j'avais prévu de le présenter, mais dans une autre étape)
    Cette classe est dans l'optique de séparer les données et leurs traitement de la partie saisie et affichage. (Elle n'est pas exaustive pour résoudre le problème, mais a un but didactique)
    Cela peut sembler plus complexe de prime abord, mais en réalité cela permet plus de réutilisabilité, facilite la maintenance et les évolutions futures.
    Note : Lorsque stracoma aura avancé, nous discuterons des avantages et facilité d'évolution. (Ex: ajout d'un récapitulatif dans la classe.)
    Après il existe plusieurs méthodes pour gérer un problème.

    N'oublions pas que stracoma veut apprendre une approche objet, et intégrer les mécanismes.
    En POO on utilise des objets avec les données et les traitements associés. (même si notre cas est très simple, c'est le principe qui est important)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  18. #18
    Membre actif Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Points : 229
    Points
    229
    Par défaut
    bonsoir tout le monde.
    Après avoir lu et compris le principe du code de rv26t (le 1er), je n'ai pas volu m'aventurer dans le 2ème (Dictionnaire) avant de maîtriser le 1er. pour cela j'essaie d'imaginer des exercices, que j'ai fais, mais j'ai un problème.
    le 1er exercice pas de problème:
    Nom : mns2.jpg
Affichages : 213
Taille : 13,6 Ko
    TabPage 1 est identique à TabPage2 et 3. Dans TabPage4 il y a juste un label et un bouton. Le principe, Label2 vaut 10 si RadioButton1 est coché et vaut 20 si le 2ème est coché. Idem pour page 2 et 3. A la page 4 le Click sur le boutton donne au label la somme des labels des 3 pages. ce code marche bien:

    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
    Public Class Class1
        Private nombre1 As Integer = 0
        Public Property addit1() As Integer
            Get
                Return Me.nombre1
            End Get
            Set(value As Integer)
                Me.nombre1 = value
            End Set
        End Property
     
        Private nombre2 As Integer = 0
        Public Property addit2() As Integer
            Get
                Return Me.nombre2
            End Get
            Set(value As Integer)
                Me.nombre2 = value
            End Set
        End Property
     
        Private nombre3 As Integer = 0
        Public Property addit3() As Integer
            Get
                Return Me.nombre3
            End Get
            Set(value As Integer)
                Me.nombre3 = value
            End Set
        End Property
     
        Public Function somme() As Integer
            Return nombre1 + nombre2 + nombre3
     
        End Function
    End Class
    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
    Public Class Form1
        Dim CClass As New Class1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If RB1111.Checked Then
                Me.LBL1.Text = 10
            ElseIf RB_11bis.Checked Then
                Me.LBL1.Text = 20
            Else
                Me.LBL1.Text = 0
            End If
            CClass.addit1 = CType(Me.LBL1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            If RB2222.Checked Then
                Me.LBL2.Text = 10
            ElseIf RB_22bis.Checked Then
                Me.LBL2.Text = 20
            Else
                Me.LBL2.Text = 0
            End If
            CClass.addit2 = CType(Me.LBL2.Text, Integer)
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            If RB333.Checked Then
                Me.LBL3.Text = 10
            ElseIf RB_33bis.Checked Then
                Me.LBL3.Text = 20
            Else
                Me.LBL3.Text = 0
            End If
            CClass.addit3 = CType(Me.LBL3.Text, Integer)
        End Sub
     
        Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Me.Label1.Text=CType(CClass.somme,String)
        End Sub
    End Class
    Mais quand je veux faire de même avec des fenêtres (ne me dites pas que c'est mauvaise méthode, oui je sais, mais je veux juste savoir pourquoi le code ne marche pas), la somme est toujours =0 :
    Nom : db17.jpg
Affichages : 220
Taille : 6,9 Ko
    code:
    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
    Public Class Class1
        Private nombre1 As Integer
        Public Property addit1() As Integer
            Get
                Return Me.nombre1
            End Get
            Set(value As Integer)
                Me.nombre1 = value
            End Set
        End Property
     
        Private nombre2 As Integer
        Public Property addit2() As Integer
            Get
                Return Me.nombre2
            End Get
            Set(value As Integer)
                Me.nombre2 = value
            End Set
        End Property
     
        Private nombre3 As Integer
        Public Property addit3() As Integer
            Get
                Return Me.nombre3
            End Get
            Set(value As Integer)
                Me.nombre3 = value
            End Set
        End Property
     
        Public Function somme() As String
     
            Return nombre1 + nombre2 + nombre3
     
        End Function
    End Class
    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
    Public Class Form1
        Dim CClass As New Class1
        Dim f As New Form2
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If Me.RadioButton1.Checked Then
                Me.Label1.Text = 10
            ElseIf Me.RadioButton2.Checked Then
                Me.Label1.Text = 20
            Else
                Me.Label1.Text = 0
            End If
            CClass.addit1 = CType(Me.Label1.Text, Integer)
     
        End Sub
     
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            f.Show()
            Me.Visible = False
        End Sub
     
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
        End Sub
    End Class
    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
    Public Class Form2
        Dim CClass As New Class1
        Dim f As New Form3
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
        End Sub
     
        Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
            If Me.RadioButton1.Checked Then
                Me.Label1.Text = 10
            ElseIf Me.RadioButton2.Checked Then
                Me.Label1.Text = 20
            Else
                Me.Label1.Text = 0
            End If
            CClass.addit2 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
            f.Show()
            Me.Visible = False
        End Sub
    End Class
    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
    Public Class Form3
        Dim CClass As New Class1
        Dim f As New Form4
     
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
        End Sub
     
        Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
            If Me.RadioButton1.Checked Then
                Me.Label1.Text = 10
            ElseIf Me.RadioButton2.Checked Then
                Me.Label1.Text = 20
            Else
                Me.Label1.Text = 0
            End If
            CClass.addit3 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
            f.Show()
            Me.Visible = False
        End Sub
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Class Form4
        Dim CClass As New Class1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = CType(CClass.somme, String)
        End Sub
     
        Private Sub Form4_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Visible = True
        End Sub
    End Class
    Merci de votre aide
    J'apprends la programmation pour le plaisir

  19. #19
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class Form4
        Dim CClass As New Class1
    tu crée une nouvelle instance de class1 qui n'est pas la même crée dans form1 et form2 et form3

  20. #20
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par stracoma Voir le message
    Mais quand je veux faire de même avec des fenêtres (ne me dites pas que c'est mauvaise méthode, oui je sais, mais je veux juste savoir pourquoi le code ne marche pas), la somme est toujours =0 :
    Le fait de le faire avec des fenêtres n'est pas une mauvaise méthode. La gestion des enchaînements de fenêtre est moins simple.
    Il ne faut pas faire un "new" de la classe "Class1" dans chaque fenêtre, ce qui cré a chaque fois une nouvelle classe initialisé à 0 dans chaque fenêtre.
    Il faut instancier (new) la classe "Class1" uniquement dans la première fenêtre, et passer cette instance aux autres.
    Le plus simple va être de créer une propriété publique de "Class1" dans chacune des fenêtres et de d'affecter l'instance de "Class1" à la propriété de la fenêtre avant son affichage.
    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
    Public Class Form1
        Dim CClass As New Class1 ' instancie la classe de données (une seule fois)
        Dim f As Form2 = New Form2()
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit1 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            f.CClass = Me.CClass
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit1 = 0
        End Sub
    End Class
    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
    Public Class Form2
        Public Property CClass As Class1
        Dim f As Form3 = New Form3()
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit2 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            f.CClass = Me.CClass
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit2 = 0
        End Sub
     
        Private Sub Form2_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            e.Cancel = True
        End Sub
    End Class
    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
    Public Class Form3
        Public Property CClass As Class1
        Dim f As Form4
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit3 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
            f = New Form4()
            f.CClass = Me.CClass
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Form3_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            e.Cancel = True
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit3 = 0
        End Sub
     
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Form4
        Public Property CClass As Class1
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = CType(CClass.somme, String)
        End Sub
     
        Private Sub Form4_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Visible = True
        End Sub
     
    End Class
    __________________________________
    Une autre méthode consiste à passer "Class1" en paramètre au constructeur des fenêtres (exemple pour info, un peu plus complexe qu'avec les propriétés)
    Il faut créer la classe "Class1" dans la première fenêtre, puis transmettre cette classe dans les fenêtres suivantes qui auront le constructeur "New" surchargé avec un paramètre de type "Class1".

    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
    Public Class Form1
        Dim CClass As New Class1 ' instancie la classe de données (une seule fois)
        Dim f As Form2
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit1 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            If f Is Nothing Then f = New Form2(CClass)
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit1 = 0
        End Sub
    End Class
    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
    Public Class Form2
        Dim CClass As Class1
        Dim f As Form3
     
        Sub New(ByRef c As Class1)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            CClass = c
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit2 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            If f Is Nothing Then f = New Form3(CClass)
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit2 = 0
        End Sub
        Private Sub Form2_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            e.Cancel = True ' pas de fermeture en cours de test
        End Sub
     
    End Class
    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
    Public Class Form3
        Dim CClass As Class1
        Dim f As Form4
     
        Sub New(ByRef c As Class1)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            CClass = c
        End Sub
     
        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            reset(Me)
        End Sub
     
        Public Sub reset(ByVal cont As Control)
            For Each RDB In cont.Controls.OfType(Of RadioButton)()
                RDB.Checked = False
            Next
            Me.Label1.Text = 0
            CClass.addit3 = 0
        End Sub
     
        Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = 0
            If Me.RadioButton1.Checked Then Me.Label1.Text = 10
            If Me.RadioButton2.Checked Then Me.Label1.Text = 20
            CClass.addit3 = CType(Me.Label1.Text, Integer)
        End Sub
     
        Private Sub Button2_Click_1(sender As Object, e As EventArgs) Handles Button2.Click
            f = New Form4(CClass)
            f.Show()
            Me.Visible = False
        End Sub
     
        Private Sub Form3_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
            e.Cancel = True ' pas de fermeture en cours de test
        End Sub
    End Class
    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
    Public Class Form4
        Dim CClass As Class1
     
        Sub New(ByRef c As Class1)
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            CClass = c
        End Sub
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = CType(CClass.somme, String)
        End Sub
     
        Private Sub Form4_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
            Form1.Visible = True
        End Sub
     
    End Class
    Nous pouvons voir que la gestion par des onglets est plus simple, mais la gestion par fenêtres est possible aussi, et dans ce cas une nouvelle propriété dans la fenêtre est plus simple à gérer.

    Quel intérêt d'avoir une classe "Class1".
    Outre le fait que nous avons nos données ensembles, et des méthodes qui les manipules, nous pouvons évoluer plus facilement.
    Il facile d'ajouter une fenêtre. (plus d'impact sur Form4) Cela est encore plus simple avec la version dictionnaire (plus d'impact sur Class1 non plus)
    La classe "Class1" peut fournir d'autres méthodes sans aucun impact sur l'existant.
    Ex : notre programme fonctionne bien, les utilisateurs vont vouloir avoir un récapitulatif des points obtenus.
    Il suffit de rajouter une méthode "Recapitulatif" dans "Class1" et d'appeler cette méthode dans form4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Public Function Recapitulatif() As String
            Return String.Format("{0} points pour la question 1 ", nombre1) & vbCrLf & String.Format("{0} points pour la question 2 ", nombre2) & vbCrLf & String.Format("{0} points pour la question 3 ", nombre3)
        End Function
    et la mise à jour dans form4 suffit avec l'appel de cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Me.Label1.Text = CType(CClass.somme, String) & vbCrLf & CClass.Recapitulatif
        End Sub
    Ce qui permet des évolutions beaucoup plus simple que dans le code du post 4
    Citation Envoyé par stracoma Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Dim p = CType(Form1.TextBox1.Text, Integer)
            Dim p1 = CType(Form2.TextBox1.Text, Integer)
            Dim p2 = CType(Form3.TextBox1.Text, Integer)
            Me.Label1.Text = (p + p1 + p2).ToString
        End Sub
    End Class
    Je vous laisse imaginer l'impact de rajout de fenêtre supplémentaire et/ou d'une méthode comme récapitulatif.

    Et avec l'utilisation d'un dictionnaire, l'évolution sera encore simplifiée.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

Discussions similaires

  1. Calcul sur des cellules sur plusieurs feuilles
    Par vlksoft dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2009, 08h08
  2. Récupérer la valeur de plusieurs cel dans des textbox
    Par Mon_ami dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/01/2009, 09h03
  3. Calcul dans des textbox
    Par gds35 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/12/2008, 21h53
  4. Réponses: 3
    Dernier message: 13/04/2008, 10h52
  5. calcule somme des textbox dans un label
    Par hich24 dans le forum Général VBA
    Réponses: 5
    Dernier message: 07/02/2008, 14h55

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