使用相应的字符串值标记位图数组

时间:2017-05-15 02:33:49

标签: c# winforms

我正在为学校创建一个“石头剪刀蜥蜴spock”​​游戏。我被困在分配的部分,我们需要使用tag属性使用相应的名称标记位图图像。我创建了一个名称数组和一个位图图像数组。

我不确定如何使用tag属性来执行此操作。确切的说明是:

  

创建一个字符串对象数组,并初始化它以包含字符串值“rock”,“paper”,“scissors”,“lizard”,“spock”​​将代码添加到每个位图以及相应的字符串值。 (例如位图“properties.resources.rock”应该用字符串“rock”标记。

private void Form1_Load(object sender, EventArgs e)
{
    string[] names =
    {
        "rock",
        "paper",
        "scissors",
        "lizard" ,
        "spock"
    };

    Bitmap[] bitmaps =
    {
         Properties.Resources.rock,
         Properties.Resources.paper,
         Properties.Resources.scissors,
         Properties.Resources.lizard,
         Properties.Resources.spock,
    };
}

我尝试添加rock.Tag = properties.resources.rock

我试过names[0].tag = properties.resources.rock

我也试过properties.resources.rock.Tag

教授还没有向我们展示如何使用标签属性,所以我确信我只是遗漏了一些明显的东西。我是新编码,任何帮助表示赞赏。

我的完整代码在这里,虽然它非常不完整。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Lab5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] names =
            {
                "rock",
                "paper",
                "scissors",
                "lizard" ,
                "spock"
            };

            Bitmap[] bitmaps =
            {
                Properties.Resources.rock,
                Properties.Resources.paper,
                Properties.Resources.scissors,
                Properties.Resources.lizard,
                Properties.Resources.spock,
            };

            // Following array will not actually be used
            // PictureBox[] pics = new PictureBox[bitmaps.Length];

            for (int i = 0; i < bitmaps.Length; i++)
            {
                PictureBox pic = new PictureBox();
                pic.Image = bitmaps[i];
                pic.Location = new Point(20 + (i * 100), 20);
                pic.SizeMode = PictureBoxSizeMode.AutoSize;
                Controls.Add(pic);
                pic.Click += clickHandler;
            }
        }

        private void displayImages()
        {
            // Move code from form1_load to here 
        }

        //click handler for every picture
        private void clickHandler(object sender, EventArgs e)
        {
            MessageBox.Show("You clicked a picture box");
        }

        private void playAgainButton_Click(object sender, EventArgs e)
        {
            // call display images here
        }
    }
}

1 个答案:

答案 0 :(得分:1)

所有winforms控件(包括PictureBox)都有一个Tag属性,可以设置为任何对象。据推测,您的教授希望您使用它将图片链接到相应的名称。

将此行添加到初始化for的{​​{1}}循环中:

PictureBoxes

然后在您的点击处理程序中,您可以显示所点击的图片的名称:

    pic.Tag = names[i];