Afficher backcolor dans picturebox

Résolu
Rambocop31 Messages postés 2 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 3 avril 2008 - 2 avril 2008 à 12:19
Rambocop31 Messages postés 2 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 3 avril 2008 - 3 avril 2008 à 11:45
bonjour
je désire afficher le backcolor (system.drawing.color) d'une picturebox en enlevant auparavant une éventuelle image (system.drawing.image) déjà affichée. Le problème c'est que l'image s'efface mais la couleur affichée est toujours du gris et ne récupère donc pas correctement la couleur sélectionnée. Je ne sais pas comment m'en sortir. Pour info je sérialise les chemins relatifs des images et les couleurs en XML après conversion en string...
Merci de m'aider.
Voici mon code:

Private Sub Button_Previsualisation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Previsualisation.Click
        If ListBox_Images.Items.Count > 0 Then
            If ListBox_Images.SelectedIndex() = -1 Then
                MessageBox.Show("Vous n'avez sélectionné aucune image dans la liste!", "Attention")
            Else
                ' On affiche la couleur sélectionnée
                If ListBox_Images.SelectedItem().ToString.StartsWith("Color [") Then
                    ' C'est ici que ca plante...
                    PictureBox_Ecran.ImageLocation = ""
                    PictureBox_Ecran.BackColor = Color.FromName(ListBox_Images.SelectedItem.ToString)
                Else
                    ' Affiche l'image redimensionnée dans le PictureBox_Ecran
                    PictureBox_Ecran.ImageLocation = ListBox_Images.SelectedItem.ToString
                End If
        End If
        Else
            ' On efface l'image pour afficher le BackColor
            PictureBox_Ecran.ImageLocation = ""
            MessageBox.Show("La liste des images est vide. Il est donc impossible de réaliser un aperçu!", "Erreur")
        End If
    End Sub

2 réponses

Rambocop31 Messages postés 2 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 3 avril 2008
3 avril 2008 à 11:45
Merci dimitriusai pour ton aide...
En fait je me suis débrouillé en faisant un split de la couleur convertie en string (de la forme Color [nom_couleur] ou bien Color[A=valA, R=valR, G=valG, B=valB]) et je traite le résultat obtenu....

Et en plus ca marche nikel, que demander de plus...

Voici le code:
Private Sub Button_Previsualisation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_Previsualisation.Click
        If ListBox_Images.Items.Count > 0 Then
            If ListBox_Images.SelectedIndex() = -1 Then
                MessageBox.Show("Vous n'avez sélectionné aucune image dans la liste!", "Attention")
            Else
                ' On affiche la couleur sélectionnée
                If ListBox_Images.SelectedItem().ToString.StartsWith("Color [A=") Then
                    ' Si la couleur est au format argb (car elle n'est pas une couleur standard)
                    PictureBox_Ecran.ImageLocation = ""
                    ' Je récupère dans le tableau les valeurs de A,R,G et B par un split ("explode" de PHP)
                    Dim couleurs As String() = Split(ListBox_Images.SelectedItem().ToString, ",")
                    Dim A As String = couleurs(0)
                    Dim R As String = couleurs(1)
                    Dim G As String = couleurs(2)
                    Dim B As String = couleurs(3)
                    ' Je formate correctement les valeurs de chaque couleur et les convertit en entier
                    A = CInt(couleurs(0).Substring(9))  ' On supprime le "Color [A=" au début du nom de la couleur
                    R = CInt(couleurs(1).Substring(3))
                    G = CInt(couleurs(2).Substring(3))
                    B = CInt(couleurs(3).Substring(3).Trim("]"))    ' Idem pour le dernier caractère, et on obtient la valeur de bleu
                    PictureBox_Ecran.BackColor = Color.FromArgb(A, R, G, B) ' Et enfin je change le BackColor
                Else
                    If ListBox_Images.SelectedItem().ToString.StartsWith("Color [") Then
                        ' Si la couleur a un format standard (ex: "red","yellow"...)
                        PictureBox_Ecran.ImageLocation = ""
                        PictureBox_Ecran.BackColor = Color.FromName(ListBox_Images.SelectedItem().ToString.Substring(7).Trim("]"))  ' On supprime le "Color [" au début du nom de la couleur et le "]" de la fin
                    Else
                        ' Affiche l'image redimensionnée dans le PictureBox_Ecran
                        PictureBox_Ecran.ImageLocation = ListBox_Images.SelectedItem.ToString
                    End If
                End If
            End If
        Else
            ' On efface l'image pour afficher le BackColor
            PictureBox_Ecran.ImageLocation = ""
            MessageBox.Show("La liste des images est vide. Il est donc impossible de réaliser un aperçu!", "Erreur")
        End If
    End Sub
3
dimitriusai Messages postés 76 Date d'inscription lundi 6 novembre 2006 Statut Membre Dernière intervention 7 mai 2009 1
2 avril 2008 à 16:50
Un refresh ne te serait pas utile ? après tout changement ?



PictureBox1.refresh()

J'ai déja eu le coup avec des button, des datagridview, etc !
0
Rejoignez-nous