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 :

Jeton non valide sur un bouton


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Points : 68
    Points
    68
    Par défaut Jeton non valide sur un bouton
    Bonjour,

    j'ai sur une interface "IHM" avec un bouton.
    Lors de l'appui sur le bouton j'appel un Function dans un Module.
    Mais j'ai une exception qui monte lors de l'exécution de ce code :
    L'exception System.BadImageFormatException n'a pas été gérée
    Message="Jeton non valide."
    Source="Projet"
    StackTrace:
    à Projet.Gestion_Txt.EffacementFait(String stFichier1, String stFichier2)
    à Projet.IHM.Button2_Click(Object sender, EventArgs e) dans \IHM.vb:ligne 476
    à System.Windows.Forms.Control.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnClick(EventArgs e)
    à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    à System.Windows.Forms.Control.WndProc(Message& m)
    à System.Windows.Forms.ButtonBase.WndProc(Message& m)
    à System.Windows.Forms.Button.WndProc(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    à System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    à System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    à System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    à System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    à System.Windows.Forms.Application.Run(ApplicationContext context)
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    à Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    à Projet.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81
    à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    Le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Gestion_Txt.EffacementFait("", "")
        End Sub
    Cela plante sur Gestion_Txt sans entrer dans la function

    Le Module :
    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
    Imports System.IO
    Imports System.IO.File
     
    Module Gestion_Txt
        'Effacement déjà réalisés
        Public Function EffacementFait(ByVal stFichier1 As String, ByVal stFichier2 As String) As Boolean
     
            Dim list_Lines_1 As New List(Of Object)(LectureFichier(stFichier1))
            Dim list_Lines_2 As New List(Of Object)(LectureFichier(stFichier2))
     
            For i As Integer = 0 To list_Lines_1.Count - 1
                For j As Integer = 0 To list_Lines_2.Count - 1
                    If list_Lines_1(i).Contains(list_Lines_2(j)) Then
                        list_Lines_1.RemoveAt(i)
                    End If
                Next
            Next
     
            WriteAllLines(stFichier1, list_Lines_1.ToArray)
     
        End Function
     
    End Module

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Si tu inséres des RemoveAt(i) dans une boucle For i, fais une boucle avec des i décroissants en commençant par i=Count-1 et finissant par i=0.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ton module est dans une DLL à part ? A priori la DLL est corrompue... essaie de la recompiler.

    Est-ce que l'IHM et le module ciblent bien la même version du framework ? (normalement ça devrait pas être un problème si la DLL cible une version inférieure, sauf si c'est la version 1.x... mais on ne peut plus cibler le framework 1.x depuis VS2005 de toutes façons)

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ou alors une dll compilé en 64bit et l'exe en 32 par exemple
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Points : 68
    Points
    68
    Par défaut
    Alors la c'est incompréhensible.

    J'ai fait quelques tests que voici :

    - Je met en commentaire les boucles For, je n'ai plus le problème, le code évolue dans ma fonction, et ne fait donc pas de traitement.

    - Je met juste la seconde boucle For en commentaire, la aussi, le code évolue.

    - Si je supprimer tous les commentaires, le code ce bloque avant d'"entrer" dans la fonction.


    Mon projet ne comporte aucune DLL, et le projet est créé avec MS VB 2005 Express

    Merci

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut removeat,liste de liste qui ne l'est pas
    bonjour,
    le 1er probleme vient à 100% de ce qu'a dit graffito,c.a.d du removeat parce que simplement il modifie en interne l'indice de la boucle de la liste

    Orthodoxie en programmation: ne jamais modifier un indice à l'interieur d'une boucle sous peine de deboires interminable,quoique etonnamment les compilateurs continuent à l'accepter(il me rappele l'histoire du goto).

    le 2eme probleme qui peut etre n'a pas attire l'attention de graffito ,c'est dans cette bizarre double boucle avec List_line1(i) qui lui meme contient un liste,alors que sa declaration ne le dit pas.
    si l'on respecte la declaration il me semble qu'on aurait du code 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
    20
    21
    22
     
    Module Gestion_Txt
        'Effacement déjà réalisés
        Public Function EffacementFait(ByVal stFichier1 As String, ByVal stFichier2 As String) As Boolean
     
            Dim list_Lines_1 As New List(Of Object)(LectureFichier(stFichier1))
            Dim list_Lines_2 As New List(Of Object)(LectureFichier(stFichier2))
     
           'boucle exterieure disparait 
           ' For i As Integer = 0 To list_Lines_1.Count - 1
                For j As Integer = 0 To list_Lines_2.Count - 1
                    If list_Lines_1.Contains(list_Lines_2(j)) Then
                        list_Lines_1.RemoveAt(i)
                    End If
                Next
           ' Next
     
            WriteAllLines(stFichier1, list_Lines_1.ToArray)
     
        End Function
     
    End Module
    ou bien si on veut garder la double boucle il faut modifier la declaration comme 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
    20
    21
     
    Module Gestion_Txt
        'Effacement déjà réalisés
        Public Function EffacementFait(ByVal stFichier1 As String, ByVal stFichier2 As String) As Boolean
     
            Dim list_Lines_1 As New List(Of List(of Object))(LectureFichier(stFichier1))
            Dim list_Lines_2 As New List(Of Object)(LectureFichier(stFichier2))
     
            For i As Integer = 0 To list_Lines_1.Count - 1
                For j As Integer = 0 To list_Lines_2.Count - 1
                    If list_Lines_1(i).Contains(list_Lines_2(j)) Then
                        list_Lines_1.RemoveAt(i)
                    End If
                Next
            Next
     
            WriteAllLines(stFichier1, list_Lines_1.ToArray)
     
        End Function
     
    End Module
    enfin pour le probleme du RemoveAt dans le 1er comme dans le 2eme cas ,c'est le probleme des comparaisons en algorithmique,il faut disposer d'une variable "swap" ,dans notre cas c'est une variable "Swap_Lines_1.

    j'aurais ecris donc en reprenant le 2eme cas modifie dans sa declaration (c'est pour valable pour le 1er cas):
    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
     
     
    Module Gestion_Txt
        'Effacement déjà réalisés
        Public Function EffacementFait(ByVal stFichier1 As String, ByVal stFichier2 As String) As Boolean
     
            Dim list_Lines_1 As New List(Of List(of Object))(LectureFichier(stFichier1))
            Dim list_Lines_2 As New List(Of Object)(LectureFichier(stFichier2))
     
            For i As Integer = 0 To list_Lines_1.Count - 1
                For j As Integer = 0 To list_Lines_2.Count - 1
                    If Not  list_Lines_1(i).Contains(list_Lines_2(j)) Then
                       'sauvegarde dans swap
                         Swap_Lines_1.add(Not  list_Lines_1(i))
                    End If
                Next
            Next
            'vide   list_Lines_1
             list_Lines_1.Clear.
            'restore it from Swap_Lines_1
             For Each obj in Swap_Lines_1
                list_Lines_1.add(obj)
             Next
            WriteAllLines(stFichier1, list_Lines_1.ToArray)
     
        End Function
     
    End Module
    le temps pris à coder me parait nettement inferieur à celui pris à resoudre l'erreur actuelle et on est quitte avec une heresie.

    bon code..................

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    @Graffito, Mabrouki, vos réponses sont sans doute très utiles, mais n'ont rien à voir avec le problème du PO... le code de la fonction EffacementFait n'est jamais exécuté, ça plante avant de rentrer dedans. C'est une BadImageFormatException, donc a priori pas un problème de code...

Discussions similaires

  1. NameSpaces non valide sur Office Open
    Par Heureux-oli dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 07/01/2008, 10h55
  2. "Argument non valide" sur requête
    Par KEROZEN dans le forum Access
    Réponses: 4
    Dernier message: 15/08/2007, 20h35
  3. differencier onsubmit() et une validation sur le bouton
    Par nocoment dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 29/05/2007, 16h15
  4. Erreur, argument non valide sur IE
    Par Babssss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/03/2007, 07h08
  5. [JDBC] Opération non valide sur un ensemble
    Par marti dans le forum JDBC
    Réponses: 2
    Dernier message: 13/10/2005, 19h17

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