Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C#4.0
I am working on Image gallery .In which I have dynamically create picturebox and label for giving image name.Now after getting load all images in to pictureboxes in a panel , issue is in arranging the picture boxes, only four in a row. After arranging the picture boxes when I am drag down the panel and again calling the button1_Click event the place of images getting destructed from them place.The images are loading on different location means it's getting over-write.please help me out.
Images links from where you can get exact idea
http://postimg.org/image/5tm5gzj87/
http://postimg.org/image/4sridmuuj/
 
here is my code.
please help me out..
 
CODE:
 public partial class Form1 : Form
    {
        int photo_Count, a;
        PictureBox[] pb;
        private string[] imgName;
        public static string ImageToShow;
        string _directoryName = @"./Snapshot";
        Image im;
        Bitmap bm;
        // System.IO.Directory mydir;
        System.IO.DirectoryInfo dirinfo;
        public Form1()
        {
            InitializeComponent();
            panel1.Top = (this.ClientSize.Height - panel1.Height) / 2;
            panel1.Left = (this.ClientSize.Width - panel1.Width) / 2;
        }
 
        private void AddControls(int Count)
        {
            pb = new System.Windows.Forms.PictureBox[Count]; // assign number array 

            for (int i = 0; i < Count; i++)
            {
                pb[i] = new System.Windows.Forms.PictureBox(); // Initialize one variable
            }
            // When call this function you determine number of controls
        }
 
        // The Event to click the image
        private void ClickImage(Object sender, System.EventArgs e)
        {
 

            // On Click: load (ImageToShow) with (Tag) of the image

            ImageToShow = ((System.Windows.Forms.PictureBox)sender).Tag.ToString();
 
            //PictureBox picBox = (PictureBox)(sender);
            //picBox.BorderStyle = BorderStyle.Fixed3D;

        }
        private Image GetCopyImage(string path)
        {
            a = 1;
            using (im = Image.FromFile(path))
            {
 
                bm = new Bitmap(im);
                return bm;
 
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 

            if (Directory.Exists(_directoryName))
            {
                imgName = Directory.GetFiles(Application.StartupPath + @"\Snapshot");
                dirinfo = new System.IO.DirectoryInfo(_directoryName);
                photo_Count = dirinfo.GetFiles("*jpg").Count();
 
                if (photo_Count != 0)
                {
 

                    AddControls(photo_Count);
                    int xpos = 5;
                    int ypos = 5;
 
                    //      MessageBox.Show("Total No of traked images in the directory are : " + photo_Count);

                    for (int i = 0; i < photo_Count; ++i)
                    {
                        Label name = new Label();
                        //*******************Load tracked Images from the folder*********************//

                        im = GetCopyImage(imgName[i]);
                        pb[i].Image = im;
 
                        if (xpos > 920)
                        {
                            xpos = 5; // leave eight pixels at Left 
                            ypos = ypos + 240;  // height of image + 220
                        }
                        pb[i].Left = xpos;
                        pb[i].Top = ypos;
                        pb[i].Size = new Size(300, 220);
                        pb[i].BorderStyle = BorderStyle.None;
 
                        pb[i].SizeMode = PictureBoxSizeMode.Zoom;
                        pb[i].BackgroundImageLayout = ImageLayout.Tile;
                        pb[i].Cursor = System.Windows.Forms.Cursors.Hand;
                        panel1.Controls.Add(pb[i]);
                        pb[i].BringToFront();
                        pb[i].Tag = imgName[i];
                        pb[i].Click += new System.EventHandler(ClickImage);
 
                        var filenNme = Path.GetFileName(imgName[i]);
                        name.Text = filenNme.ToString();
                        name.Size = new Size(300, 30);
                        name.Left = xpos;
                        name.Top = ypos + 220;
                        name.Tag = imgName[i];
                        panel1.Controls.Add(name);
                        xpos = xpos + 305;
 
                    }
                }
                else
                {
                    MessageBox.Show("There is no tracked image in directory...!!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                if (MessageBox.Show("There is no directory for Tracked Images...!!!", "Information", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) ;
                {
                    System.IO.Directory.CreateDirectory(_directoryName);
 
                }
 
            }
        }
 
        private void btnDELETE_Click(object sender, EventArgs e)
        {
            File.Delete(ImageToShow);
            //button1.PerformClick();
            MessageBox.Show("The image is deleted successfully...!!!", "Information",  MessageBoxButtons.OK, MessageBoxIcon.Information);
 
        }
Posted 13-Jul-13 10:35am
Edited 16-Jul-13 4:33am
v7
Comments
ThePhantomUpvoter at 13-Jul-13 15:41pm
   
Can you rephrase whatever your question is? I have no idea what your question actually is or what the problem is. First thing that I see is that your delete button event handler is empty.
footballpardeep at 16-Jul-13 5:40am
   
May be , before deleting the image, remove it from panel.
Dhruv Shah007 at 16-Jul-13 5:43am
   
sir its a good idea ..can u tell me how?
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

Hi Dhruv,
 
From the code you showed in your question I assume you are experimenting with kind of prototype. If you want to go that way better implement a custom control or at least a composed user control (out of Label and picturebox). Of course then you need a kind of "list" to present/select the individual pictures.
I would implement a custom control (OwnerDrawn) and get rid of useless PictureBox/Label controls by just painting the Image/Text in a custom control's paint handler (this should boost perfomance) and you can easier control things like DoubleBuffering.

 
An alternative could be just using a prepared control doing exactly what you showed in your code - a ListView with the property View set to View.Tile
 
Do you have any specific problems with your current approach?
 
Btw. for this kind of app I would highly recommend using WPF and not Windows.Forms as presentation technology. (But that's another story)
 
just my 2 cents (or what currency you use Wink | ;-)
 
kind regards Johannes
  Permalink  
Comments
Dhruv Shah007 at 16-Jul-13 9:16am
   
sir whatever you just said is right but i have some other issue and one more issue is o=in arranging the picture boxes only four in a row.
After arranging the picture boxes when I am dragging the panel and again calling the button1_Click event the place of images getting destructed from them place.
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

Try this,
 
 PictureBox picToDelete;
 
modify this function.
 
private void ClickImage(Object sender, System.EventArgs e)
       {
 

           // On Click: load (ImageToShow) with (Tag) of the image

           ImageToShow = ((System.Windows.Forms.PictureBox)sender).Tag.ToString();
 
           PictureBox picToDelete = (PictureBox)(sender);
          
 
       }
 
private void btnDELETE_Click(object sender, EventArgs e)
       { 
 panel1.Controls.Remove(picToDelete);
 

           File.Delete(ImageToShow);
           //button1.PerformClick();
           MessageBox.Show(&quot;The image is deleted successfully...!!!&quot;, &quot;Information&quot;,  MessageBoxButtons.OK, MessageBoxIcon.Information);
 
       }</pre>
  Permalink  
Comments
Dhruv Shah007 at 17-Jul-13 4:52am
   
I tried this ..but its not working sir

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

  Print Answers RSS
0 OriginalGriff 350
1 Jochen Arndt 150
2 Richard MacCutchan 135
3 Andreas Gieriet 100
4 DamithSL 95
0 OriginalGriff 6,045
1 DamithSL 4,601
2 Maciej Los 4,087
3 Kornfeld Eliyahu Peter 3,480
4 Sergey Alexandrovich Kryukov 3,260


Advertise | Privacy | Mobile
Web03 | 2.8.141220.1 | Last Updated 17 Jul 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100