Code pour utiliser une classe

Signaler
-
 Micoute -
Bonjour à tous,

toujours dans l'élaboration de classes, je me demande comment je pourrais faire pour utiliser mes classes.

Voici un exemple :

Public Class Cercle
    Dim _Rayon, _Diametre, _Perimetre, _Surface As Double

    Public Sub New(ByVal r As Double)
        _Rayon = r
    End Sub

    Property Rayon As Double
        Get
            Return _Rayon
        End Get
        Set(valeur As Double)
            _Rayon = valeur
        End Set
    End Property

    Public Function Surface() As Double
        Return Math.PI * (Math.Pow(Rayon, 2))
    End Function

    Public Function Perimetre() As Double
        Return 2 * Math.PI * Rayon
    End Function

    Public Function Diametre() As Double
        Return Rayon * 2
    End Function
End Class


J'ai donc ajouter à mon projet une form, mais je ne sais pas si c'est la bonne méthode.

exemple:

Public Class Form1
    Dim MonCercle As Cercle

    Function Verification() As Boolean
        Dim Bon As Boolean = True
        If Me.TxtRayon.Text Is Nothing Or Not IsNumeric(Me.TxtRayon.Text) Then
            Bon = False
        End If
        Return Bon
    End Function

    Private Sub Affichage()
        With MonCercle
            TxtDiametre.Text = .Diametre
            TxtPerimetre.Text = .Perimetre
            TxtSurface.Text = .Surface
        End With
    End Sub

    Private Sub NouveauCercle(ByVal sender As System.Object, ByVal e As System.EventArgs) _
        Handles TxtRayon.TextChanged

        If Verification() Then
            MonCercle = New Cercle(TxtRayon.Text)
            Affichage()
        End If
    End Sub
End Class


Dites-moi s'il vous plait, ce que vous en pensez, je vous remercie

Tout homme doit être poli ; mais il doit aussi être libre.

13 réponses

Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2020
143
Bonjour,

Si tu appelles Affichage avant de changer le champ "Rayon", ça risque pas de fonctioner.
Fais toujours un test dans ce cas : If ... Is Nothing Then (fonctionne aussi avec IsNot)
Ansuite, à la place d'une TextBox pour la saisie, utilises un NumericUpDown, c'est plus sûr

En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
4
Bonjour,

Public Class form1
 Call classeC1.procedureP1()
End Class

Public Class ClassC1
 Shared Sub procedureP1()
  MsgBox("Ici Class1C")
 End Sub
End Class


Mais franchement, on n'a pas besoin de faire des classes, les procédures suffisent en VB dans la quasi totalité des cas.

dim cercle as integer = 0
'
form1_load(...)
  cercle = 2
  call rond
  msgbox(cercle) ' = 4
end sub
'
sub rond()
  cercle = cercle * 2
end sub


Codialement, Joe.
Messages postés
206
Date d'inscription
samedi 17 janvier 2009
Statut
Membre
Dernière intervention
5 mars 2013
1
Bonjour EhJoe,
on n'a pas besoin de faire des classes

Le structure VBnet est faites de classes, donc si on veut aller de l'avant, la POO (ce qui veut dire utiliser des classes) est absolument necessaire de mon point de vue.

Pour de la programmation de base (programmation de mon niveau), on peut surement se passer de classe. Il est vrai que la gymnastique necessaire pour travailler avec les classes n'est pas toujours evidente.

Enfin, c'est juste une opinion en passant.

A+
JLuc01
Rebonjour à tous,

JLuc01 à raison et j'essaie de faire des objets à toutes les sauces, mais tous vos propos sont contradictoires, pourtant j'aimerais vraiment connaître ce mode d'emploi qui n'est pas écrit dans les livres, car je souhaite faire une bibliothèque de fonctions pour ne pas avoir à faire une classe à chaque fois que j'en ai besoin et faire comme Math.Pi, pouvoir faire Cercle.Surface, vous comprenez ce que je veux dire !

Je vous remercie de votre aide si précieuse.


Tout homme doit être poli ; mais il doit aussi être libre.
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
4
Cher ami,

Tu as pour ça le module aussi, ou encore le copier-coller.

Cordialement, Joe.
Bonjour EhJoe,

en fait, je ne comprend pas, est-ce que j'utilise la bonne manière ou suis-je à côté de la plaque ?

Merci de votre réponse !


Tout homme doit être poli ; mais il doit aussi être libre.
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
4
Suite 2...

Ben, tant que ça marche c'est la bonne méthode, et comme quelqu'un l'a souligné, la classe est plus présente dans vbNet quand dans vb6. Mais bon, pour s'adresser à une classe existante il faut avoir à modifier des paramètres dans cette dernière, ce qui est excessivement rare, sinon on ne fait pas d'autre classe, une c'est déjà de trop puisque ça peut être détecté sans avoir à l'écrire, mais bon, la syntaxe est désormais ainsi.

Toutefois, dans le cas présent, je ne vois pas trop pourquoi utiliser une classe afin de s'en servir comme procédure, ça rajoute une hiérarchie et ça complique la syntaxe des appel, mais à part ça je ne vois pas d'avantage...

A voir ton code, une procédure ou des fonctions feraient très bien l'affaire, je ne vois pas en quoi se justifie une classe. En plus ton petit code fait que 50% des lignes sont inutiles si tu mettais ce dernier directement en calcul au lieu de faire des appels.
Tout dépend ensuite du nombre de lieux différents d'appels, si tu en a cinq, dix ça vaut le coup, en dessous je mettrais directement le code, même en recopiant, ainsi ça limite les appels.

Comme c'est parti ça va faire un champ de très courtes fonctions, ce qui n'est pas toujours plus clair qu'un court code recopié, tout dépend en fait de la taille de ton code dans les fonctions, mais il est certain que tu dois pouvoir te passer de la classe, c'est rare de voir des classes dans le code, le gens de vb6 n'en ont même pas le reflexe je crois...

Au plaisir, cordialement, Joe.
Merci EhJoe,

en fait, je commence par une toute petite classe et je ne compte pas m'arrêter en si bon chemin, car je veux faire quelque choses de bien plus gros c'est pour cette raison que je veux être absolument la bonne méthode, car avec 6000 lignes, ce sera beaucoup plus dur de s'y retrouver si ce n'est pas la bonne méthode et je tiens pas du tout à oublier ce que je fais et réapprendre une autre façon de pratiquer !


Tout homme doit être poli ; mais il doit aussi être libre.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
Salut

une erreur de base
j'ai testé ta class
une exception a été relevé
use the "new" keyword to create an object instance

si j'ai une class Cercle et je veux utiliser
la class cercle je crée un objet d'instance de cette class

dim moncercle = cercle

maintenant j'ai une erreur de syntaxe pourquoi ?

dans le code de ta clsss
Public Sub New(ByVal r As Double)
        _Rayon = r
    End Sub


donc je dois fournir le rayon lors de la déclaration d'objet d'instance
dim moncercle as new cercle(4)


si tu veux déclarer une instance de ta class
sans fournir de rayon sois
tu supprimes ta sub new
ou tu utilises optional
 Public Sub New(Optional ByVal r As Double = 1)
        _Rayon = r
    End Sub


dim mycircle as new cercle 
 mycircle.Rayon = 4
 Dim sr As Double
 sr = mycircle.Surface


ou
dim mycircle as new cercle(4)
 Dim sr As Double
 sr = mycircle.Surface
Bonjour et merci ShayW,

Là d'un seul coup, je sens que ça avance dans le bon sens, car comme je l'ai expliqué plus haut, je souhaite mettre les objets à toutes les sauces et surtout créer des classes d'objets pour des bibliothèques prêtes à l'emploi et qui peuvent évoluer en même que moi !

En tous cas merci pour ces précieux conseils, l'idée du rayon optionnel avec une valeur par défaut, je n'y avais même pas pensé.


Tout homme doit être poli ; mais il doit aussi être libre.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
48
lis
ici

Bonjour,


Si tu suis le lien de shayw et que tu cliques sur le bouton sommaire, tu vas aboutir sur cette page. En descendant complètement cette page, tu vas trouver plusieurs options pour télécharger gratuitement le cours au complet. L'avantage du téléchargement global étant, bien sur de pouvoir le consulter sans devoir se connecter. Je pense qu'il faut devenir membre avant de télécharger, mais ils ne t'enverront rien d'autre par la suite, sauf si tu choisis d'en recevoir. Les membres peuvent télécharger un magazine à tous les deux mois, environ. Même que les membres peuvent aussi télécharger les numéros précédents.
Bonjour à vous deux,

J'ai essayé de faire des classes, mais apparemment il y a encore de l'apprentissage.

Je suis content malgré tout, car on ne m'a pas dit que je faisais fausse route ou que ce n'est pas la bonne méthode quoique je pense qu'on peut faire des classes dans un répertoire classes et les utiliser dans un répertoire applications.

Je vous remercie néanmoins pour l'aide que vous m'apportez.


Tout homme doit être poli ; mais il doit aussi être libre.