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 :

Problème création de fonctions


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut Problème création de fonctions
    Salut c'est encore moi avec un nouveau problème pour remplir le forum
    Alors j'ai un petit soucis avec mes fonctions, je les crée, mais le "End Function" est souligné en vert, et le message est :
    La fonction <nom de la fonction> ne retourne pas une valeur pour tous les chemins de code ...
    J'ai donc regardé sur ce tutoriel mais lui sa fonction fait une ligne, moi elle en fait 24 donc si je met le return devant ma première ligne ça ne marche pas.
    Que faire ?

  2. #2
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    Tu obtiens ce message car il y a au moins une possibilité pour que ta fonction ne passe jamais par un Return.

    Pour t'aider d'avantage, il nous faudrait ces fameuses 24 lignes

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    J'ai pleins de fonctions, en voici une qui détecte la version de Windows7
    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 Function VerificationVersionDeWindows()
            Dim VersionDeWindows7Ultimate As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
            If VersionDeWindows7Ultimate = "Ultimate" Then
                Dim EcritureVersion As StreamWriter = New StreamWriter("C:\Ultimate.txt")
            Else
                Dim VersionDeWindows7Professional As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
                If VersionDeWindows7Professional = "Professional" Then
                    Dim EcritureVersion As StreamWriter = New StreamWriter("C:\Professional.txt")
                Else
                    Dim VersionDeWindowsHomePremium As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
                    If VersionDeWindowsHomePremium = "HomePremium" Then
                        Dim EcritureVersion As StreamWriter = New StreamWriter("C:\HomePremium.txt")
                    Else
                        Dim VersionDeWindowsHomeBasic As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
                        If VersionDeWindowsHomeBasic = "HomeBasic" Then
                            Dim EcritureVersion As StreamWriter = New StreamWriter("C:\HomeBasic.txt")
                        Else
                            Dim VersionDeWindowsStarter As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
                            If VersionDeWindowsStarter = "Starter" Then
                                Dim EcritureVersion As StreamWriter = New StreamWriter("C:\Starter.txt")
                            End If
                        End If
                    End If
                End If
            End If
        End Function

  4. #4
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    A la base, une fonction retourne quelque chose or dans ton code on ne voit aucun Return.

    Est ce qu'elle est censé retourner quelque chose?
    Si oui, quoi? Quelle variable dans ta fonction?

    Si tu ne veux pas que ta "fonction" retourne quelque chose, déclare ta méthode comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Sub VerificationVersionDeWindows()
    End Sub
    De plus pour les fonctions, il est préférable de typer la valeur de retour pour plus de clarté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Function VerificationVersionDeWindows() As String    '<- retourne une chaîne de caractère
    End Function
    PS:
    Procédure: méthode ne retournant pas de résultat (Sub);
    Fonction: méthode retournant un résultat (Function)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Très bien, je vais utiliser le sub alors, merci j'aurais appris quelque chose
    Je testerai dans la soirée pour voir si il n'y à plus l'erreur.
    Merci encore !

  6. #6
    Membre émérite Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Par défaut
    No problem

  7. #7
    Membre émérite

    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
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Private Function VerificationVersionDeWindows()
    si tu avais mis le option strict on tu aurais obtenu une erreur
    Erro Option Strict On requires all Function, Property, and Operator declarations to have an 'As' clause.

  8. #8
    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
    Par défaut
    Bonjour,

    si tu transformes ta fonction en sub elle ne servira a rien.
    Les variables sont déclarées en locales elle sont donc détruite en sortie de ta fonction ou sub.

    Il faudrait savoir ce que tu veux faire?

    Je te met quelques exemples en rapport avec ta fonction d'origine.

    En passant en paramètre une chaine de caractère listant les versions de windows
    forme de la chaine "Ultimate Professional HomePremium HomeBasic Starter"
    Pour connaître la version de windows
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Function VersionDeWindows() As String
            Return My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
        End Function
    pour savoir si c'est l'une de ces versions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Function VerificationVersionDeWindows(ByVal VersionWindows As String) As Boolean
            Return VersionWindows.Contains(My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", ""))
        End Function
    Pour avoir un stream d'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Function StreamVersionDeWindows(ByVal VersionWindows As String) As StreamWriter
            Dim EcritureVersion As StreamWriter = Nothing
            Dim VersionDeWindows7Ultimate As String = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "EditionID", "")
            If VersionWindows.Contains(VersionDeWindows7Ultimate) Then
                EcritureVersion = New StreamWriter("d:\" & VersionDeWindows7Ultimate & ".txt")
            End If
            Return EcritureVersion
        End Function
    Note: j'ai mis d: pour le disque

    Exemple d'utilisation des méthodes
    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
        Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
            ' défini la liste des versions
            Const ListeVersionWindows As String = "Ultimate Professional HomePremium HomeBasic Starter"
            ' méthode qui permet de savoir si nous sommes avec une des version de la liste (boolean)
            If VerificationVersionDeWindows(ListeVersionWindows) Then
                ' je suis avec une des versions ci-dessus.
            End If
     
            ' méthode pour créer un flux d'écriture
            Dim EcritureVersion As StreamWriter = StreamVersionDeWindows(ListeVersionWindows)
            If Not (EcritureVersion Is Nothing) Then ' flux créer ?
                ' j'écrit dans mon fichier
                ' récupére le nom de la version (VersionDeWindows) et l'écrit dans le fichier (qui porte le nom de la version - défini dans StreamVersionDeWindows)
                EcritureVersion.WriteLine(VersionDeWindows())
                EcritureVersion.Close()
            End If
        End Sub
    Espérant que cela t'éclairera sur les fonctions.

    A+, Hervé.
    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.

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

Discussions similaires

  1. [VBA-W]problèmes de création de fonction
    Par dev81 dans le forum VBA Word
    Réponses: 1
    Dernier message: 26/04/2007, 14h39
  2. Réponses: 2
    Dernier message: 13/03/2007, 15h35
  3. Problème de création de fonction
    Par ArnaudD dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 29/09/2006, 22h06
  4. Réponses: 5
    Dernier message: 30/03/2006, 14h52

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