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 :

P'tite question concernant les Class ou Module


Sujet :

VB.NET

  1. #1
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut P'tite question concernant les Class ou Module
    Bonjour,

    Je suis en train de finaliser un petit programme, et je voudrais le rendre plus "friendly". C'est pour ma mère, elle est pas super alaise en informatique
    J'ai donc décidé de numéroter certains controles pour qu'elle puisse suivre le cheminement du prog. sans se poser de question. (Etape1, Etape2...) J'ai crée 3 images par controle (inactif, mouseHover et click). Voilà pour la petite histoire

    Ma form principale est déjà bien chargée, et j'aimerais rassembler les procedures concernant le design de ces controles ailleurs. ça doit être possible j'imagine, mais... je ne sais pas du tout comment faire ! Je ne sais même pas de quelle coté chercher. Je ne crois pas que dans ma bible, P.Lasserre aborde ce sujet

    Merci d'avance !

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Si j'ai bien compris : tu voudrais mettre les procédures de type "event" dans un fichier à part ?

    Tu ne peux pas ...

    Pour la petite histoire (on en a tous une hein :p) : avant DotNet 2 (je crois), quand tu concevais ta form, Visual Studio te générais du code que tu pouvais voir dans le fichier "MaForm.vb" et englobé dans une région. Maintenant ce code est invisible à l'utilisateur (je ne sais pas d'ailleurs où ils l'ont mis).

    Toujours est il que tu peux mettre tes fonctions/procédures de traitement dans un module ou classe à part mais les procédures d'événement liés aux contrôles de ton formulaire, tu ne peux pas les mettre ailleurs.

    Par exemple, tu as une textbox où tu rentres une date de naissance, un bouton pour calculer l'âge, une label pour afficher le résultat.

    - Tu saisie la date de naissance : Tu vas utiliser la procédure "OnTextChanged" pour vérifier la date de naissance à la volée. Cette procédure peut très bien appeler une fonction contenue dans une classe ou module pour vérifier cette date de naissance.
    - tu clic sur le bouton : tu vas utiliser la procédure "OnClick" pour lancer le calcul de l'âge. Cette procédure va appeler une fonction contenue dans une classe ou procédure pour calculer l'âge et te retourner le résultat, que tu vas insérer dans ta label.

    Un petit exemple

    Le fichier de ta form :

    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
    Public Class Form1
        Dim monAge As New AgeDuCapitaine
     
     
        Private Sub txtDateNaissance_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDateNaissance.TextChanged
            'Appel de 
            If Not monAge.DateCorrecte(txtDateNaissance.Text) Then
                BtnCalculAge.Enabled = False
            Else
                BtnCalculAge.Enabled = True
            End If
        End Sub
     
        Private Sub BtnCalculAge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCalculAge.Click
            lblAgeResultat.Text = monAge.RecupererAge().ToString
        End Sub
    End Class

    Le fichier "AgeDuCapitaine.vb"

    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 AgeDuCapitaine
     
        Private dtmDateNaissance As DateTime
     
     
        Public Property DateNaissance() As DateTime
            Get
                Return Me.dtmDateNaissance
            End Get
            Set(ByVal value As DateTime)
                Me.dtmDateNaissance = value
            End Set
        End Property
     
     
        Public Sub New()
     
        End Sub
     
        Public Function DateCorrecte(ByVal strDate As String) As Boolean
            Dim uneDate As DateTime
            uneDate = Date.Parse(strDate)
            'Ton Traitement de vérification de date 
     
            '..
            '..
            '..
            Me.dtmDateNaissance = uneDate
            Return True
        End Function
     
        Public Function RecupererAge() As Integer
            Dim intAge as Integer = -1
            'ton traitement pour calculer l'age
            '..
            '..
            '..
            Return intAge
        End Function
    End Class

    En espérant avoir été un peu plus clair !

    A noter que tu peux utiliser les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #Region "NomDeMaRegion"
     
    #End Region
    Qui t'offrent la possibilité de regrouper du code ...

  3. #3
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    Merci pour tes infos ! J'y vois effectivement un peu plus clair.

    A force de faire des prog de plus en plus complexe, "l'ascenseur vertical" commence à devenir un problème On perd en visibilité. C'est d'autant plus génant si je mets un projet en standby un petit moment.

    Finalement, l'architecture que tu m'expliques est aussi celle que tu me conseilles de suivre, non ?

    Si j'ai bien compris, je devrais laisser tous les evenements dans la form sur laquelle ils sont créé (pas le choix), mais ce qui concerne la couleur d'un bouton, son texte, son positionnement... mettre ça dans une class que je pourrais appeler FormDesign par exemple, qui regrouperait toutes les procedures ce de genre.

    Encore merci.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Tu peux très bien dans un module faire une ou plusieurs fonctions qui te permettront de changer les propriétés d'un controle.

    Mais il faut que ce soit générique... Comme ça tu peux l'utiliser pour tout tes contrôles.

    Un exemple de procédures que tu pourrais glisser dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub ChangeControl(ByRef ctrl As Control, Optional ByVal blnVisible As Boolean = True, Optional ByVal blnEnabled As Boolean = True)
     
     
    End Sub
    Je ne t'écris pas le code, mais seulement la définition de la procédure devrait te donner les indices

    Une notion essentielle pour un développeur c'est de savoir "Factoriser" son code. Si tu te souviens de tes cours de maths, je ne t'apprends rien !

    Sinon : On dit cela, car il est préférable pour un développeur de séparer ses traitements récurrents vers des modules ou classes (en général on utilise les classes en DotNet mais bon) afin de limiter le nombre de ligne et ainsi gagner du temps.

    Bon courage pour la suite en tout cas.

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Luc1an0 Voir le message
    avant DotNet 2 (je crois), quand tu concevais ta form, Visual Studio te générais du code que tu pouvais voir dans le fichier "MaForm.vb" et englobé dans une région. Maintenant ce code est invisible à l'utilisateur (je ne sais pas d'ailleurs où ils l'ont mis).
    Accessoirement, cela n'a pas grand chose à voir avec .Net mais beaucoup avec VS et avec le compilateur (support des classes partielles en l'occurence).

    Le code généré par le concepteur est dans MyForm.Designer.vb ( ou .cs en C#), ton code étant dans MyForm.vb

    Le VB 1.0 (et le C# 1.0) ne supportant pas les classes partielles le code généré était dans le fichier unique de classe. Avec le support des classes partielles, on peut éclater une classe en plusieurs fichiers sources.

  6. #6
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    Slt Luc1an0,

    Effectivement, je comprends bien l'interet de factoriser. Des lignes de commandes inutiles finissent par rendre le code illisible.
    Merci pour la def. de la procedure ! Ne maitrisant pas cet art (sans doute à cause de la création automatique par l'IDE), jusqu'a present, j'ai défini l'aspect visuel de mes controles à l'aide de "Sender" et "Select Case" le bouton machin : tac appliquer, bouton bidule : tac appliquer... C'est sans doute pas top, mais c'est mieux que mon 1er programme où j'ai créé 41 procedures identique ne sachant pas faire autrement Heureusement que je connaissais Ctrl+C Ctrl+V

    Sinon, c'est quoi la différence entre une class et un module au juste ? Je suis autodidact et y'a des trucs de base que je ne maitrise pas, désolé Par habitude, je crée un module pour regouper certaines procédures mais franchement ça aurait pu tomber sur une class

    Bonne journée.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par arnomedia Voir le message
    Sinon, c'est quoi la différence entre une class et un module au juste ? Je suis autodidact et y'a des trucs de base que je ne maitrise pas, désolé Par habitude, je crée un module pour regouper certaines procédures mais franchement ça aurait pu tomber sur une class

    Bonne journée.
    De mémoire, un module c'est à peu près l'équivalent d'une classe static en VB.Net ("Shared" que vous dites dans ca langage bizarre). A vrai dire, je ne savais pas que les modules existait encore en VB.Net.

    Une classe c'est un objet instantiable (si tu as des problème avec la notion de classe, il faut d'urgence lire un tutoriel sur la POO avant de continuer à coder).

  8. #8
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    Voilà, c'est pour cela que je sais pas quel est la différence entre Module et Class. C'est pas bien clair en fait

  9. #9
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Août 2007
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Salut, vu que tu bosses sous Visual Studio.Net je peux m'hasarder à te donner une petite explication vu que j'utilise un peu des deux :

    lorsque tu utilises un module, ses methodes publiques sont utilisables directement sans que tu aies besoin d'instancier quoi que ce soit

    module X
    public sub carinet()
    xxx
    end sub
    end Module

    par contre avec la classe tu es obligé d'instancier la classe d'abord en faisant un dim classetest as new Maclasse avant de commencer à utiliser ses méthodes publiques.

    Exemple dans VB tu as les modules String, DateTime, etc.... qui te permettent d'utiliser leurs fonctions partout dans ton code.

    En gros c'est là la différence que moi je voie entre les deux.

  10. #10
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    Merci pour l'info.

    Je trouve ça qd m surprenant car la difference semble infime et dans ce cas à quoi bon créer 2 trucs differents (Class & Module). Il doit y avoir d"autres differences ne penses tu pas ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Non c'est pas "Si" surprenant, car tu peux très bien te façonner un jeu de modules (une boite à outils) qui t'offre beaucoup de fonctionnalité.

    Après des classes, c'est en général spécifique à UN seul projet. Tu peux toujours faire des classes qui pourront être réutiliser dans d'autres projets mais je pense que tu as compris le principe.

    Personnellement les modules sont pas terribles à mon goût car ça peut être TRES vite un fourre tout, et là... C'est le drame.

    Toujours est il que ça permet pas mal de choses.

    Ah oui tiens, autre exemple d'utilisation d'un module : déclaration de variables globales dans une application.

    Enfin tu comprends que ce n'est pas du tout pareil.

    Tu ne dois voir QUE la différence en haut / bas de page de code "Class / Module" & "End Class / Module" mais je t'assure que les concepts sont vraiment très différents.

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Je ne vois pas ce qu'apporte un module vs un classe Shared.

    A vrai dire, je les soupçonne d'avoir conservé cela par ce que ça existait en VB6.

    D'ailleurs cette notion de "module" n'existe pas en C#.

  13. #13
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    Ben, faut vous mettre d'accord là ! Je plaisante...

    En toute franchise, je croyais qu'il était possible de déclarer une variable globale dans une Class (sauf qu'il faut l'appeler, elle là où on veut utiliser cette variable, si j'ai bien compris).

    Pendant que j'y suis j'ai conseillé l'utilisation d'une variable globale y'a pas longtemps et la personne qui a posté après moi trouvais ça scandaleux. Pourquoi pas, bien que je n'ai pas encore rencontré de problème en pratiquant ainsi. Du coup, je me pose la question suivante : comment faire alors pour transmettre une valeur d'une procédure à une autre ? Dans la définition des procédures avec un ByVal ? Si c'est ça, ça semble un peu compliqué et pas toujours possible, si je ne me trompe pas.

    J'attends vos conseilles

  14. #14
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 467
    Points : 647
    Points
    647
    Par défaut
    Une classe de type Singleton (instanciable une seule fois) avec juste des propriétés

  15. #15
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut Un peu de sérieux
    Bonjour.

    Je n'ai pas pu m'empécher de réagir sur ce post pour rétablir un peu la vérité...

    Un module EST une class !

    En fait, il s'agit d'une classe non heritable avec comme attribut standardModule. Cet attribut est mis à disposition par la Dll Microsoft.VisualBasic.

    Un coup de réflection donne cela sur un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <StandardModule> _
    Public NotInheritable Class MonModule
        Friend Shared Truc As String
    End Class
    C'est donc une "bidouille" pour ne pas perturber les utilisateurs issus de VB.

    La seule "plus-value" (si on juge que cela en est une), est qu'il n'est pas nécessaire de fournir le nom de la classe pour accéder à l'une des propriétés ou méthodes partagées.

    Dans la cas d'un module on va donc écrire :
    Au lieu d'un module, on peut donc simplement déclarer une classe ayant des propriété et/ou méthode partagées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public NotInheritable Class MonModule
        Friend Shared Truc As String
    End Class
    Dans ce cas on utilisera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonModule.Truc = "TOTO"
    ET CELA SANS INSTANCIER LA CLASSE !

    Personnellement, je trouve que pour gagner en clarté, mieux vaut donc abandonner l'utilisation du module ...

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Public Class TestAmbi
        Sub Ambi()
            t = "ouio"
        End Sub
    End Class
    Public Module d
        Public t As String
    End Module
    Public Module c
        Public t As String
    End Module
    Et là forcément, il y a ambiguité ... et on est donc obligé de préciser le module (ou plutôt la classe !) dont l'on veut utiliser la propriété :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public Class TestAmbi
        Sub Ambi()
            c.t = "ouio"
        End Sub
    End Class
    Cdt.

  16. #16
    Membre confirmé Avatar de arnofly
    Homme Profil pro
    Développeur Web / Webdesigner
    Inscrit en
    Mai 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web / Webdesigner
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 411
    Points : 468
    Points
    468
    Par défaut
    ok je comprends bien la differrence maintenant. C'est bon à savoir.

    Merci à vous tous pour m'avoir éclairé sur le sujet.

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

Discussions similaires

  1. question concernant les fichier.bin
    Par argon dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 27/08/2005, 17h44
  2. Questions concernant les études supérieures et travails
    Par Vivian Pennel dans le forum Etudes
    Réponses: 25
    Dernier message: 21/06/2005, 15h23
  3. Réponses: 11
    Dernier message: 21/06/2005, 10h16
  4. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  5. Réponses: 7
    Dernier message: 10/09/2004, 14h28

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