简体   繁体   中英

Random out image for picture box c#

I'm working on a Winform where I have this picture box. I have 52 different images and only 1 image is going to be shown in this particular picture box. I'm not really sure how I should do this without ending up with 52 if statements. Could anyone help me with this as I'm still kinda new in programming :)

I'm programming in c#

Thank you! :D

Little example:

// Controls:
// pictureBox1
// Dock: Fill
// SizeMode: StretchImage
// timer1

using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Linq;

namespace RandomImg
{
    public partial class Form1 : Form
    {
        // List of files to show 
        private List<string> Files;

        public Form1()
        {
            InitializeComponent();
        }

        // StartUp 
        private void Form1_Load(object sender, EventArgs args)
        {
            // basic settings.
            var ext = new List<string> {".jpg", ".gif", ".png"};

            // we use same directory where program is.
            string targetDirectory = Directory.GetCurrentDirectory();

            // Here we create our list of files
            // New list
            // Use GetFiles to getfilenames
            // Filter unwanted stuff away (like our program)
            Files = new List<string>
                (Directory.GetFiles(targetDirectory, "*.*", SearchOption.TopDirectoryOnly)
                .Where(s => ext.Any(e => s.EndsWith(e))));

            // Create timer to call timer1_Tick every 3 seconds.
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Interval = 3000; // 3 seconds
            timer1.Start();

            // Show first picture so we dont need wait 3 secs.
            ChangePicture();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // Time to get new one.
            ChangePicture();
        }

        private void ChangePicture()
        {
            // Do we have pictures in list?
            if (Files.Count > 0)
            {
                // OK lets grab first one
                string File = Files.First();
                // Load it
                pictureBox1.Load(File);
                // Remove file from list
                Files.RemoveAt(0);
            }
            else
            {
                // Out of pictures, stopping timer
                // and wait god todo someting.
                timer1.Stop();
            }
        }
    }
}

The first step would be to make a list of some sort to store all your images. You can either opt for a list of Images, or a list of their paths.

If you're using the Image route, you can create a list of images with List<Image> images = new List<Image>(); and add each image to it with images.Add(image); for each image .

If you're using the path route, you can create a list of paths with List<String> paths = new List<String>(); and add each image to it with paths.Add(path); for each path .

Then, when you're setting the picture box to a random image, you can generate a random number and pick one out of the list.

For Images:

Random random = new Random();
pictureBox1.Image = images[random.Next(0, images.Count - 1)];

For paths:

Random random = new Random();
pictureBox1.ImageLocation = paths[random.Next(0, images.Count - 1)];

As Tuukka says, using paths is a much better idea (memory usage-wise), unless you've created the images dynamically, or already have the images for some other reason.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM