在图片框中使用foreach循环

时间:2018-11-19 14:46:56

标签: c# image winforms foreach picturebox

我正在尝试使代码尽可能短,并且我打算以一定的间隔从3个不同图片框的6张图片中随机选择图片。我没有为每个图片框复制和粘贴开关和案例三遍,而是尝试在一个foreach循环中进行更改。我对C#和Windows表单非常陌生,因此感谢您的帮助。 编辑:对不起,措辞不佳,但问题在于该程序说element不是有效的图片框,我想知道为什么以及如何修复它(如果可能),但感谢替代解决方案。

private void timer1_Tick(object sender, EventArgs e)
    {

        Random random = new Random();
        int picture = random.Next(1, 7);
        var pictures = new List<PictureBox> { pictureBox1, pictureBox2, pictureBox2 };
        foreach (PictureBox element in pictures)
        {
            switch (picture)
            {
                case 1:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\cherry.jpg");
                    break;
                case 2:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\bell.jpg");
                    break;
                case 3:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\lemon.jpg");
                    break;
                case 4:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\orange.jpg");
                    break;
                case 5:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\star.jpg");
                    break;
                case 6:
                    this.element.Image = Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\skull.jpg");
                    break;
            }
        }

5 个答案:

答案 0 :(得分:3)

如何使用像这样的Dictionary

Dictionary<int, Image> dictionary = new Dictionary<int, Image>()
{
    {1,  Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\cherry.jpg")},
    {2,  Image.FromFile("C:\\Users\\seanb\\OneDrive\\Pictures\\bell.jpg")},
};

dictionary.TryGetValue(picture, out value);
if (value != null)
{
    this.element.Image = value;
}

答案 1 :(得分:0)

所以你有照片:

static Image[] s_Images = new string[] {
     "cherry.jpg",
     "bell.jpg",
     "lemon.jpg", 
     "orange.jpg",
     "star.jpg", 
     "skull.jpg"}
  .Select(file => Path.Combine(@"C:\Users\seanb\OneDrive\Pictures", file))
  .Select(file => Image.FromFile(file)) 
  .ToArray();  

static Random random = new Random();

您想将这些图像随机分配到图片框:

private void timer1_Tick(object sender, EventArgs e) {
  foreach (PictureBox box in new PictureBox[] { pictureBox1, pictureBox2, pictureBox2 }) {
    box.Image = s_Images[random.Next(s_Images.Length)];
  }
}

答案 2 :(得分:0)

Random random = new Random();
int picture = random.Next(1, 7);
var pictureBoxs = new List<PictureBox> { pictureBox1, pictureBox2, pictureBox2 };
string basePath = "C:\\Users\\seanb\\OneDrive\\Pictures\\";
string[] pictures = new string[]{ "cherry.jpg", "bell.jpg", "lemon.jpg", "orange.jpg", "star.jpg", "skull.jpg" };
foreach (PictureBox element in pictureBoxs)
{
    this.element.Image = Image.FromFile(basePath+ pictures[picture]);
}

答案 3 :(得分:0)

使用db.coll.aggregate([{ $match: { // Selection } }, { $group: { _id: { geometry: "$geometry" }, dups: { "$addToSet": "$_id" }, count: { "$sum": 1 } } }, { $match: { count: { "$gt": 1 } // Duplicates considered as count greater than one } } ], { allowDiskUse: true }

Dictionary

答案 4 :(得分:0)

private void timer1_Tick(object sender, EventArgs e)
        {
            Random random = new Random();
            List<string> picPaths = new List<string>();
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\cherry.jpg");
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\bell.jpg");
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\lemon.jpg");
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\orange.jpg");
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\star.jpg");
            picPaths.Add("C:\\Users\\seanb\\OneDrive\\Pictures\\skull.jpg");

            pictureBox1.Image = Image.FromFile(picPaths[random.Next(picPaths.Count)]);
            pictureBox2.Image = Image.FromFile(picPaths[random.Next(picPaths.Count)]);
            pictureBox3.Image = Image.FromFile(picPaths[random.Next(picPaths.Count)]);
        }