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

Windows Forms Discussion :

[VB.Net] Problème sur (re)dessin d'une feuille


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier Avatar de tomnie
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 71
    Points
    71
    Par défaut [VB.Net] Problème sur (re)dessin d'une feuille
    Bonjour,
    je developpe, pour un projet perso, une application de scan d'image (locale ou distante).
    J'ai une erreur in-interceptable de paramètre non valide dont le message est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    System.ArgumentException: Paramètre non valide utilisé.
       at System.Drawing.Image.get_Width()
       at System.Drawing.Image.get_Size()
       at System.Windows.Forms.PictureBox.get_ImageRectangle()
       at System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)
       at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
       at System.Windows.Forms.Control.WmPaint(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    Il m'est arrivé que la pile d'appel soit plus grande mais c'est souvent celle la.
    Le probleme survient sur la mise en barre de tache, un agrandissment (ou reduction) de la taille de la fenetre, un passage par l'ecran de veille, enfin bref tout ce qui oblige à redessiner la feuille.

    sur ma feuille se trouve un tabcontrol et une picturebox.

    Il semble que le probleme vienne de la picture box.

    Toutes les idées pour résoudre le probleme sont les bienvenues...

    Merci à tous.
    MERCI à vous tous qui me répondez !
    Sans maîtrise, la puissance n'est rien !
    Se battre avec les meilleurs, crever avec les autres

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    C'est pas ton image qui pose problème ?
    Si tu enlève le code qui colle l'image dans ta PictureBox, t'as encore le problème ?
    T'as pas un autre morceau de code qui jouerait avec l'image ?

  3. #3
    Membre régulier Avatar de tomnie
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Pour ce qui est de l'image cela se passe ainsi:
    - une fonction qui récupère l'image physique
    - une fonction qui affiche l'image dans le picture box
    - on efface l'image physique pour écrire la prochaine et laissé le répertoire propre

    -> l'image physique est stocké dans tmp.ext

    j'ai une image à afficher en cas de problème avec l'image récupérer, et avec cette image, cela fonctionne très bien.

    les images défilent, donc je me suis dit que cela pouvait jouer, ainsi j'ai affiché une image, arrêter le défilement et agrandit, cela a planté de la même facon ...
    MERCI à vous tous qui me répondez !
    Sans maîtrise, la puissance n'est rien !
    Se battre avec les meilleurs, crever avec les autres

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par tomnie
    j'ai une image à afficher en cas de problème avec l'image récupérer, et avec cette image, cela fonctionne très bien.
    Bah ouais, forcément.

    Tu peut montrer ton code qui modifie l'image ? paske je comprend pas bien ce que tu fais, mais c'est sûr qu'il y a qqch de pas bien dedans

    Tu dois jouer avec la référence à l'image au mauvais moment... Tient, t'as essayé de mettre l'image de ta PictureBox à null, AVANT de toucher à l'instance de ton image ?

  5. #5
    Membre régulier Avatar de tomnie
    Inscrit en
    Septembre 2002
    Messages
    144
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    Voici le code d'affichage de l'image :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Private Function afficheImage(Optional ByVal nomFichier As String = "tmp.jpg") As Boolean
            Dim img As Bitmap
            Dim retour As Boolean
            If IO.File.Exists(nomFichier) Then
                If New IO.FileInfo(nomFichier).Length <> 0 Then
                    img = New Bitmap(nomFichier)
                    If img.Width <= 0 Or img.Height <= 0 Then
                        Me.AffImg.SizeMode = PictureBoxSizeMode.CenterImage
                        Me.AffImg.Image = CType(New Bitmap("pb.jpg"), Image)
                        Me.AffImg.Update()
                        Me.AffImg.Show()
                        Application.DoEvents()
                        retour = False
                    Else
                        Dim imgW As Integer = img.Width, imgH As Integer = img.Height
                        Dim coef As Decimal = 0
                        If imgW > imgH Then
                            coef = CDec(imgW / Me.AffImg.Width)
                        Else
                            coef = CDec(imgH / Me.AffImg.Height)
                        End If
                        Try
                            Me.AffImg.SizeMode = PictureBoxSizeMode.CenterImage
                            Me.AffImg.Hide()
                            'Me.AffImg.ClientSize = New Size(img.Width, img.Height)
                            Me.AffImg.Image = CType(img, Image)
                            Me.AffImg.Show()
                            Me.AffImg.Update()
                            Application.DoEvents()
                            retour = True
                        Catch e As Exception
                            log.Log(e, FichierLog.LogLevel.Debug Or FichierLog.LogLevel.Info)
                            retour = False
                        End Try
                        'If coef > 1 Then
                        '    Me.AffImg.ClientSize = New Size(CInt(imgW / coef), CInt(imgH / coef))
                        'Else
                        '    Me.PictureBox1.ClientSize = New Size(CInt(coef * imgW), CInt(coef * imgH))
                        'End If
                        img.Dispose()
                    End If
                Else
                    Me.AffImg.SizeMode = PictureBoxSizeMode.CenterImage
                    Me.AffImg.Image = CType(New Bitmap("pb.jpg"), Image)
                    Me.AffImg.Update()
                    Me.AffImg.Show()
                    Application.DoEvents()
                    retour = False
                End If
            Else
                Me.AffImg.SizeMode = PictureBoxSizeMode.CenterImage
                Me.AffImg.Image = CType(New Bitmap("pb.jpg"), Image)
                Me.AffImg.Update()
                Me.AffImg.Show()
                Application.DoEvents()
                retour = False
            End If
            Return retour
        End Function
    Le code qui gere l'ensemble chargement-affichage de l'image :
    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
    Private Sub timeDwl_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timeDwl.Tick
            Me.timeDwl.Enabled = False 'Arrete l etimer le temps de charger l'image
            Me.sbAction.Text = "Timer Action"
            Cursor.Current = Cursors.WaitCursor
            Me.sbAction.Text = "Construit l'url"
            Dim urlimg As String = fabriqueURL(Me.tvSites.SelectedNode.Text) 'fabrique l'url de  l'image à telecharger
            Me.sbAction.Text = "Recupere l'image"
            While Not chargeImage(urlimg) 'tant qu'une image n'a pas pu etre telecharger
                Me.sbAction.Text = "Cherche une image..."
                urlimg = fabriqueURL(Me.tvSites.SelectedNode.Text) 'on cherche l'image 'apres
            End While
            Me.sbImage.Text = nomImg
            Me.sbAction.Text = "Affiche l'image"
            afficheImage() 'on affiche l'image telecharger
            Me.sbAction.Text = "Efface le fichier temporaire"
            If IO.File.Exists("tmp.jpg") Then 'on efface le fichier temporaire si il existe
                IO.File.Delete("tmp.jpg")
            End If
            Cursor.Current = Cursors.Default
            Me.sbAction.Text = "Attend l'image suivante"
            Me.timeDwl.Enabled = True 'on relance le timer pour l'image suivante
        End Sub
    J'ai deja essayé en ne supprimant pas tmp.jpg mais cela n'a rien chagé ...

    Je ne vois vraiment pas ou est mon erreur ...
    MERCI à vous tous qui me répondez !
    Sans maîtrise, la puissance n'est rien !
    Se battre avec les meilleurs, crever avec les autres

  6. #6
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Dsl, VB c'est vraiment imbitable (pour moi), je laisse la main a un spécialiste.

    En plus y'a des trucs que je comprends pas. Genre pourquoi tu fait un Update() sur la picture box et pourquoi tu appelles Application.DoEvents().

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

Discussions similaires

  1. Problème sur la copie d'une feuille Excel
    Par narutoe dans le forum Excel
    Réponses: 5
    Dernier message: 11/10/2013, 12h44
  2. Réponses: 3
    Dernier message: 07/07/2006, 16h47
  3. problème sur l'enregistrement d'une instance
    Par Génie dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 12/05/2006, 10h48
  4. Problème sur la réalisation d'une requête
    Par soso78 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 13h17
  5. [VB.NET] Problème sur composant comboBox hérité
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2004, 14h54

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