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 lors d'appel de fonction dans page de démarrage. [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut Problème lors d'appel de fonction dans page de démarrage.
    Bonjour à tous.
    Je bidouille un logiciel qui manipule des fichiers XML.
    Mon problème est le suivant :
    J'ai fais une page de démarrage en fondu, dans laquelle s'initialise toutes les données de mon logiciel (lecture des fichiers XML pour les paramètres données de comptes utilisateurs etc.)
    dans ma page de démarrage j'ai donc ce 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 Demarrage
        Dim Paramètres As Propriétés = LitDataXMLPropriétés("Propriétées.xml") 'Créé une classe "Paramètres" Propriétés qui contient les données du fichier "Propriétées.xml"'
     
    Public Function LitDataXMLPropriétés(ByVal filename As String) As Propriétés 'Créé la fonction lecture du fichier xml'
            Try 'Essaye le code suivant : '
                Using objStreamReader As New StreamReader(filename) 'Utilise le flux de données du fichier "filename"'
                    Try 'Essaye le code suivant : '
                        Return DirectCast((New XmlSerializer(GetType(Propriétés))).Deserialize(objStreamReader), Propriétés) 'Sérialise le fichier xml'
                    Catch ex As Exception 'Si l'essais échoue'
                        MessageBox.Show("Echec de la lecture." & ex.Message) 'Affiche un message d'erreur'
                    End Try 'Fin de l'essais du code'
                End Using 'Coupe toutes ressources utilisées pour créer le flux.'
            Catch ex As Exception 'Si le fichier n'existe pas'
                Paramètres = New Propriétés 'Créé un nouveau fichier "Propriétés"'
                EcritDataXMLPropriétés("Propriétées.xml", Paramètres) 'L'écrit'
                System.Windows.Forms.Application.Restart() 'Redémarre l'application'
                End 'Ferme l'application en cours'
            End Try 'Fin de l'essais du code'
            Return Nothing
        End Function
     
        Public Sub EcritDataXMLPropriétés(ByVal filename As String, paramètres As Propriétés)
            Try
                Using objStreamWriter As StreamWriter = New StreamWriter(filename)
                    Try
                        Dim xsPropriety As New XmlSerializer(GetType(Propriétés), New XmlRootAttribute("Propriétés"))
                        xsPropriety.Serialize(objStreamWriter, paramètres)
                    Catch ex As Exception
                        MessageBox.Show("Echec de l'écriture." & ex.Message)
                    End Try
                End Using
            Catch ex As Exception
                MessageBox.Show("Fichier inaccessible." & ex.Message)
            End Try
        End Sub
    ...
    End sub
    Ceci est un fragment du code complet.

    Dans ma feuille de paramètres j'ai ceci :
    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
    Private Sub Boutton_Valider_Click(sender As Object, e As EventArgs) Handles Boutton_Valider.Click
     
            If Check_Autor_Modif_MDP.Checked = True Then
                Demarrage.Paramètres.Act_MDP.Autor_MDP = True
            Else
                Demarrage.Paramètres.Act_MDP.Autor_MDP = False
            End If
            Demarrage.EcritDataXMLPropriétés("Propriétées.xml", Paramètres)
            Me.Close()
     
        End Sub
     
        Private Sub Param_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            If Demarrage.Paramètres.Act_MDP.Autor_MDP = True Then
                Check_Autor_Modif_MDP.Checked = True
            Else
                Check_Autor_Modif_MDP.Checked = False
            End If
        End Sub
    Mon problème est que lors de l'appel à mes fonctions dans ma page de demarrage, le logiciel lance une seconde fois l'application. Une idée quelqu'un svp ?
    Autre chose, j'ai conté ce phénomène en tapant le code dans toutes mes pages mais c'est un peut lourd à la fin... J'ai aussi essayé de taper une seule fois ce code dans une "page de code" sous visual studio 2013 mais je n'arrives pas à récupérer les données de dans cette feuille. Voila merci par avance de votre aide et vos lumières !

  2. #2
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    bonsoir ,

    Ton application se lance une seconde fois car tu as mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Forms.Application.Restart()
    Cette méthode est lancée car tu as certainement une erreur dans ton 1er bloc Try....Catch !! Ce n'est pas très logique de relancer ton programme à la suite d'une erreur......

    Je rajouterai egalement que ceci n'a absolument aucun effet (ce qui suit le code supra):

    Si tu veux gérer une exception concernant la non existence d'un fichier il faut utiliser ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Try
    Catch ex as system.io.filenotfoundexception
    'fichier non trouvé !
    'placer ici le code de gestion
    '........
    '...........
    end try

    @+

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Tout d'abord merci de votre réponse. J'ai mis un redémarrage d'application car lorsque j'appellerais la fonction de lecture du fichier xml, ça ne marchait pas...
    Le end est la Car il me Ferme le programme en cours et en démarre un autre. Sans lui, mon application des le début démarre 2 fois donc si il est nécessaire.
    De plus, comme mon application démarre bien une première fois et me lis le fichier une fois avoir redémarrer si il n'existe pas, il n'y a aucune raison qu'il me donne une erreur si je l'appele après qu'elle a réussi à la réaliser (je me trompe ?)

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2013
    Messages
    235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 235
    Par défaut
    Bonjour,
    Je ne voulais pas prendre part à ta 'bidouille'...
    Mais j'ai rapidement lu ça:
    Le end est la Car il me Ferme le programme en cours et en démarre un autre.
    MSDN:
    Vous pouvez placer l'instruction END ne importe où dans une procédure pour forcer l'application entière de cesser sa progression. END ferme tous les fichiers ouverts avec une instruction Open et efface toutes les variables de l'application. L'application se ferme dès que il n'y a pas d'autres programmes possédant une référence à ses objets et aucun de son code est en cours d'exécution .

    Je ne vois pas où il démarre un autre 'programme'...

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Non pardon je me suis mal exprimé: la ligne qui précède le end me redémarre le logiciel mais ne me Ferme pas celui en cours. En fait il me le reouvre. Donc le end est la pour fermer celui qui es en cours d'exécution. J'espère que c'est plus clair ^^ désolé de la confusion.

  6. #6
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    En fait, pour développer un peut plus mon problème, j'avais fait ceci :
    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
    Public Function LitDataXMLPropriétés(ByVal filename As String) As Propriétés 'Créé la fonction lecture du fichier xml'
            Try 'Essaye le code suivant : '
                Using objStreamReader As New StreamReader(filename) 'Utilise le flux de données du fichier "filename"'
                    Try 'Essaye le code suivant : '
                        Return DirectCast((New XmlSerializer(GetType(Propriétés))).Deserialize(objStreamReader), Propriétés) 'Sérialise le fichier xml'
                    Catch ex As Exception 'Si l'essais échoue'
                        MessageBox.Show("Echec de la lecture." & ex.Message) 'Affiche un message d'erreur'
                    End Try 'Fin de l'essais du code'
                End Using 'Coupe toutes ressources utilisées pour créer le flux.'
            Catch ex As Exception 'Si le fichier n'existe pas'
                Paramètres = New Propriétés 'Créé un nouveau fichier "Propriétés"'
                EcritDataXMLPropriétés("Propriétées.xml", Paramètres) 'L'écrit'
                Paramètres = LitDataXMLPropriétés("Propriétées.xml") 
            End Try 'Fin de l'essais du code'
            Return Nothing
        End Function
    Mais ma liste de paramètres restait vide.
    J'ai donc aujourd'hui essayé avec la méthode plus approprié que vous m'avez transmise en remplaçant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Catch ex As Exception 'Si le fichier n'existe pas'
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Catch ex As filenotfoundexception 'Si le fichier n'existe pas'
    Mais le résultat reste le même.
    Voila pourquoi je le fais redémarrer : pour qu'au redémarrage, il exécute cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class Demarrage
        Dim Paramètres As Propriétés = LitDataXMLPropriétés("Propriétées.xml") 'Créé une classe "Paramètres" Propriétés qui contient les données du fichier "Propriétées.xml"'
    sans trouver d'erreur vu que le fichier est créé l'instant précédent, donc pas de filenotfound et du coup ma liste de paramètres est bien remplie. Le End suivant sert à fermer la première exécution du programme qui ne trouvait pas ledit fichier. Voila voila !

  7. #7
    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,
    Citation Envoyé par Vidou12 Voir le message
    Bonjour à tous.
    Je bidouille un logiciel qui manipule des fichiers XML.
    Mon problème est le suivant :
    J'ai fais une page de démarrage en fondu, dans laquelle s'initialise toutes les données de mon logiciel (lecture des fichiers XML pour les paramètres données de comptes utilisateurs etc.)
    dans ma page de démarrage j'ai donc ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class Demarrage
        Dim Paramètres As Propriétés = LitDataXMLPropriétés("Propriétées.xml") 'Créé une classe "Paramètres" Propriétés qui contient les données du fichier "Propriétées.xml"'
    En fait c'est dans ta classe demarrage qu'il faut prévoir le déroulement des opérations
    Il ne faut donc pas déclarer et instancier la classe en faisant la lecture du fichier dans les propriétés sinon c'est compliqué de gérer l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Demarrage
        Dim Paramètres As Propriétés 
     
        Sub New(ByVal filename As String)
            If System.IO.File.Exists(filename) Then 
    ' existe : lit le fichier avec la méthode qui renvoie une instance
                Paramètres = LitDataXMLPropriétés("Propriétées.xml") 'Créé une instance "Paramètres" Propriétés qui contient les données du fichier "Propriétées.xml"'
            else
    ' n'existe pas : cré l'instance et le fichier
                Paramètres = New Propriétés 'Créé un une instance "Propriétés"'
                EcritDataXMLPropriétés("Propriétées.xml", Paramètres) 'L'écrit' dans un fichier
            end if
        End Sub
    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.

  8. #8
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Ok mais comment je place mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub New(ByVal filename As String)
    ??
    Car il me dis qu'il faut appeler la méthode InitializeComponent.
    En cherchant sur le web j'ai vu que c’était le code qui ce lance au démarrage du programme si j'ai bien compris ? Il me faut le mettre dedans ? Si oui on le trouve ou ??

  9. #9
    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
    Je n'avais pas fait attention que demarrage était ton "form" de départ

    Tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            If System.IO.File.Exists(filename) Then 
    ' existe : lit le fichier avec la méthode qui renvoie une instance
                Paramètres = LitDataXMLPropriétés("Propriétées.xml") 'Créé une instance "Paramètres" Propriétés qui contient les données du fichier "Propriétées.xml"'
            else
    ' n'existe pas : cré l'instance et le fichier
                Paramètres = New Propriétés 'Créé un une instance "Propriétés"'
                EcritDataXMLPropriétés("Propriétées.xml", Paramètres) 'L'écrit' dans un fichier
            end if
    dans l'évènement load
    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.

  10. #10
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Ok merci beaucoup. Pour le moment ça marche. Ce soir j'essaye de voir si en appelant d'une autre form les fonctions de ma première form ça refait pareil ou pas. Merci !

  11. #11
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Décembre 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 75
    Par défaut
    Bon ben mauvaise nouvelle : le résultat est le même : quand je suis sur ma form paramètres, que j'appelle la fonction, dans ma form demarrage pour écrire dans le fichier : paramètre.xml, mon logiciel se relance comme si on l'ouvrait une seconde fois.
    Pourtant aucun restart reset ou quoi dans mon code... Je ne comprends vraiment pas...

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

Discussions similaires

  1. [MySQL] Appel de fonction dans la même page
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/01/2007, 00h31
  2. Réponses: 10
    Dernier message: 08/12/2006, 02h18
  3. Appel de fonction dans une page JSP
    Par Addouna dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/03/2006, 12h56
  4. Réponses: 6
    Dernier message: 20/01/2006, 19h28
  5. Réponses: 7
    Dernier message: 10/09/2005, 16h49

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