none
Image dans PictureBox depuis la base de donnée RRS feed

  • Question

  • Bonjour,

    j'essaie d'afficher dans une PictureBox une image provenant de ma base de données.

    Si je récupère le chemin d'accès dans une TextBox, il est correcte par contre dans ma PictureBox tous mes \ sont doublés (\\)

    Voici mon code :

    // Dans une TextBox
    TBPhoto.Text = (string)el.PhotoEleve;
                
    // Chargement Photo dans la PictureBox
                if (el.PhotoEleve != string.Empty)
                {
                    System.Drawing.Bitmap PhotoDeEleve = new System.Drawing.Bitmap((string)el.PhotoEleve);
                    PCTBPhotoEleve.Image = PhotoDeEleve;
                    TBPhoto.Text = el.PhotoEleve;
                }

    Je ne sais pas si je m'y prend mal pour la PictureBox?

    Merci pour votre aide

    jeudi 15 novembre 2012 10:52

Réponses

  • Bonjour,

    Comment voyez-vous cette valeur ? Vous la regarder avec le débogueur ?

    \ est le caractère d'échappement en csharp qui permet de mettre des caractères de contrôles directement dans une chaine comme \n, \t etc... et donc \\ pour indiquer un simple \.

    Il y a sans doute une confusion qq part entre cette notation et la valeur réelle que vous voyez... Essayez de voir http://msdn.microsoft.com/fr-fr/library/vstudio/ms228362.aspx

    Par exemple dans le Main d'une application console :

     string a = "c:\\Test";
     string b = @"c:\Test";
     Console.WriteLine(a);
     Console.WriteLine(b);
     Console.ReadKey();
    A l'affichage vous avez c:\Test dans les deux cas. Vous voyez c:\\Test dans les deux cas avec le débogueur car c'est juste la notation habituelle en C# en considérant que \ est le caractère d'échappement...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 15 novembre 2012 11:48
    Modérateur
  • Bonjour,

    Si PCTBPhotoEleve est un textbox, alors ce n'est pas un PictureBox. Pour afficher les images, il faut utiliser le contrôle PictureBox dans la boite à outils.

    Comme le dit Patrice, le path avec \\ c'est pour échapper et vous ne le voyez qu'en debug. Ce n'est pas grave si dans la base vous avez les doubles \ car Windows arrive à gérer ce genre de cas.

    En mettant un PictureBox à la place du TextBox tout ira pour le mieux. Vos autres TextBox (nom, prénom...) ne disparaisse pas, ils juste caché par le TextBox qui veut afficher une image. Vous utilisez :

    PCTBPhotoEleve.Dock = DockStyle.Fill;

    Ceci indique au TextBox de s'élargir sur toute le conteneur parent. Si vous l'enlevez, le TextBox gardera sa taille original. Si ce n'est pas le cas cela veut qu'il a besoin d'afficher une image qui a une taille supérieur au TextBox.

     

    Est-ce que vous avez compris ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    • Marqué comme réponse paintbox00 jeudi 15 novembre 2012 14:19
    jeudi 15 novembre 2012 14:04
  • Bonjour,

    merci pour votre réponse.

    Je me suis trompé dans le message précédent. PCTBPhotoEleve est bien un PictureBox et non un TextBox.

    En fait, comme vous l'avez dit, c'est

    PCTBPhotoEleve.Dock = DockStyle.Fill;

     qui vient cacher les autres TextBox.

    La solution est donc bien de 

    1° déclarer une variable Bitmap

    2° l'associer à mon PictureBox

     if (el.PhotoEleve != string.Empty)
                {
                    Bitmap image = new Bitmap(el.PhotoEleve);
                    PCTBPhotoEleve.Image = image;
                }
    Encore merci à tous les 2 !

    • Marqué comme réponse paintbox00 jeudi 15 novembre 2012 14:19
    jeudi 15 novembre 2012 14:18

Toutes les réponses

  • En fait, cela fonctionne si je fais ceci

     if (el.PhotoEleve != string.Empty)
                {
                    Bitmap image = new Bitmap(el.PhotoEleve);
                    PCTBPhotoEleve.Dock = DockStyle.Fill;
                    PCTBPhotoEleve.Image = image;
                }

    où el.PhotoEleve est le chemin que je récupère de ma BD. Sauf que il me créé une nouvelle PictureBox de cette façon alors que ma PictureBox existe déjà.

    Si je ne créé pas un nouvel objet Bitmap comme ceci

     Bitmap image =el.PhotoEleve;

    , cela ne fonctionne plus et  il me met qu'il ne peut pas convertir un string en System.Drawing.Bitmap.


    jeudi 15 novembre 2012 11:41
  • Bonjour,

    Comment voyez-vous cette valeur ? Vous la regarder avec le débogueur ?

    \ est le caractère d'échappement en csharp qui permet de mettre des caractères de contrôles directement dans une chaine comme \n, \t etc... et donc \\ pour indiquer un simple \.

    Il y a sans doute une confusion qq part entre cette notation et la valeur réelle que vous voyez... Essayez de voir http://msdn.microsoft.com/fr-fr/library/vstudio/ms228362.aspx

    Par exemple dans le Main d'une application console :

     string a = "c:\\Test";
     string b = @"c:\Test";
     Console.WriteLine(a);
     Console.WriteLine(b);
     Console.ReadKey();
    A l'affichage vous avez c:\Test dans les deux cas. Vous voyez c:\\Test dans les deux cas avec le débogueur car c'est juste la notation habituelle en C# en considérant que \ est le caractère d'échappement...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".


    jeudi 15 novembre 2012 11:48
    Modérateur
  • Le code que vous montrez crée une nouvelle image, pas un nouveau contrôle (il faudrait un new PictureBox). Décrivez peut-être ce que vous voyez ? Si vous voyez un nouveau contrôle c'est qu'il est crée ailleurs qu'ici (comment est initialisé PCTBPhotoEleve ? est-ce que avez un new PictureBox qq part ?)


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    jeudi 15 novembre 2012 11:55
    Modérateur
  • Bonjour,

    merci pour votre aide.

    PCTBPhotoEleve est un TextBox que j'ai placé dans ma Windows Form.  Il fait partie d'autres TextBox qui reprennent les coordonnées de l'élève (Nom, Prénom, Age...).

    Si je fais ceci :

    if (el.PhotoEleve != string.Empty)
                {
                    Bitmap image = new Bitmap(el.PhotoEleve);
                    PCTBPhotoEleve.Dock = DockStyle.Fill;
                    PCTBPhotoEleve.Image = image;
                }

    les TextBox (Nom, Prénom, Age...) disparaissent et sont remplacés par le nouveau TextBox PCTBPhotoEleve qui est créé.

    J'ai essayé sans faire de new mais là ça ne fonctionne pas.

    jeudi 15 novembre 2012 13:55
  • Bonjour,

    Si PCTBPhotoEleve est un textbox, alors ce n'est pas un PictureBox. Pour afficher les images, il faut utiliser le contrôle PictureBox dans la boite à outils.

    Comme le dit Patrice, le path avec \\ c'est pour échapper et vous ne le voyez qu'en debug. Ce n'est pas grave si dans la base vous avez les doubles \ car Windows arrive à gérer ce genre de cas.

    En mettant un PictureBox à la place du TextBox tout ira pour le mieux. Vos autres TextBox (nom, prénom...) ne disparaisse pas, ils juste caché par le TextBox qui veut afficher une image. Vous utilisez :

    PCTBPhotoEleve.Dock = DockStyle.Fill;

    Ceci indique au TextBox de s'élargir sur toute le conteneur parent. Si vous l'enlevez, le TextBox gardera sa taille original. Si ce n'est pas le cas cela veut qu'il a besoin d'afficher une image qui a une taille supérieur au TextBox.

     

    Est-ce que vous avez compris ?


    Merci de valider par "Proposer comme réponse" si celle-ci répond à votre demande !

    • Marqué comme réponse paintbox00 jeudi 15 novembre 2012 14:19
    jeudi 15 novembre 2012 14:04
  • Bonjour,

    merci pour votre réponse.

    Je me suis trompé dans le message précédent. PCTBPhotoEleve est bien un PictureBox et non un TextBox.

    En fait, comme vous l'avez dit, c'est

    PCTBPhotoEleve.Dock = DockStyle.Fill;

     qui vient cacher les autres TextBox.

    La solution est donc bien de 

    1° déclarer une variable Bitmap

    2° l'associer à mon PictureBox

     if (el.PhotoEleve != string.Empty)
                {
                    Bitmap image = new Bitmap(el.PhotoEleve);
                    PCTBPhotoEleve.Image = image;
                }
    Encore merci à tous les 2 !

    • Marqué comme réponse paintbox00 jeudi 15 novembre 2012 14:19
    jeudi 15 novembre 2012 14:18