C# 如何在单击事件时显示标签图像

C# 如何在单击事件时显示标签图像,c#,C#,我需要做一个简单的配对游戏。有了这个匹配的游戏,当我点击它时,我需要显示一个图像。在单击事件之前,只显示一种颜色。我已经有了一种方法,可以将图像指定给标签,如下所示: private void imgToLbl() { foreach (Control ctrl in tableLayoutPanel1.Controls) { Label imgLbl = ctrl as Label; if (img

我需要做一个简单的配对游戏。有了这个匹配的游戏,当我点击它时,我需要显示一个图像。在单击事件之前,只显示一种颜色。我已经有了一种方法,可以将图像指定给标签,如下所示:

    private void imgToLbl()
    {
        foreach (Control ctrl in tableLayoutPanel1.Controls)
        {
            Label imgLbl = ctrl as Label;
            if (imgLbl != null)
            {
                int rndNum = rndImage.Next(0, files.Count);
                imgLbl.Image = files[rndNum];
                lbls.Add(imgLbl);
                imags.Add(imgLbl.Image);
                ints.Add(rndNum);
                files.RemoveAt(rndNum);
            }
        }
    }
我还认为我必须为最终指定的图像和标签制作另外两个列表。因此,我可以使用ints列表作为索引指示器,在单击事件中再次分配它们。我已经有了我的点击事件的一部分:

    private void label_click(object sender, EventArgs e)
    {
        Label clickLbl = sender as Label;

        if (clickLbl != null)
        {

        }
    }
我的想法是,不知何故,我必须检查标签列表中clickLbl的索引。但我不知道怎么做。我可能完全错了,但我想听到一个很好的方法。有人能帮我吗?我现在真的很糊涂

以下是它应该完成的步骤:

  • 当应用程序启动时,标签不应该有图像

  • 当用户单击标签时,标签将显示在imgToLbl()方法中指定的图像

  • 图像现在可见

  • 注:

    我不能用图片盒代替标签。我们必须使用标签。否则我就不会问这个问题了

    你可以用它来获取控件的索引;这与当前初始化标签的方式一致

    或者,您可以自己在
    列表中保留对控件的引用,并以编程方式将它们添加到父控件中-这将为您节省(很好,会为您节省:p)设计器中的大量工作,并且您将更少地依赖WinForms如何控制其
    控件

    它还提供对索引的完全控制,因此您可以将它们与图像的
    列表进行匹配。

    您可以使用它来获取控件的索引;这与当前初始化标签的方式一致

    或者,您可以自己在
    列表中保留对控件的引用,并以编程方式将它们添加到父控件中-这将为您节省(很好,会为您节省:p)设计器中的大量工作,并且您将更少地依赖WinForms如何控制其
    控件


    它还可以让您完全控制索引,因此您可以将它们与图像的
    列表进行匹配。

    您似乎有很多不相关的代码,而忽略了一些相关的代码。所以我们必须对你的实际要求进行逆向工程

    看起来您有一个N个图像文件的集合,表单上有一个包含N个标签控件的面板。您希望将图像随机分配给标签,但仅在单击标签时在标签上显示图像

    首先,我强烈鼓励大家遵循匈牙利语,不要使用匈牙利符号,也不要使用缩写

    也就是说,您的问题可以通过使用属性来解决,您可以在其中存储有关控件的信息

    因此,您的“
    imgToLbl
    ”方法变为:

    private List<Image> _files = { /* however this works */ };
    
    private void RandomizeImages()
    {
        // Randomize the file list. 
        // See http://stackoverflow.com/questions/273313/randomize-a-listt
        Shuffle(_files);
    
        int imageIndex = 0;
    
        // Loop over all labels to assign an image index.
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            var imageLabel = control as Label;
            if (imageLabel == null)
            {
                continue;
            }
    
            imageLabel.Tag = imageIndex;
            imageIndex++;
        }
    }
    

    您似乎有很多不相关的代码,并且省略了一些相关的代码。所以我们必须对你的实际要求进行逆向工程

    看起来您有一个N个图像文件的集合,表单上有一个包含N个标签控件的面板。您希望将图像随机分配给标签,但仅在单击标签时在标签上显示图像

    首先,我强烈鼓励大家遵循匈牙利语,不要使用匈牙利符号,也不要使用缩写

    也就是说,您的问题可以通过使用属性来解决,您可以在其中存储有关控件的信息

    因此,您的“
    imgToLbl
    ”方法变为:

    private List<Image> _files = { /* however this works */ };
    
    private void RandomizeImages()
    {
        // Randomize the file list. 
        // See http://stackoverflow.com/questions/273313/randomize-a-listt
        Shuffle(_files);
    
        int imageIndex = 0;
    
        // Loop over all labels to assign an image index.
        foreach (Control control in tableLayoutPanel1.Controls)
        {
            var imageLabel = control as Label;
            if (imageLabel == null)
            {
                continue;
            }
    
            imageLabel.Tag = imageIndex;
            imageIndex++;
        }
    }
    

    你的“便条”让人觉得如果你在处理
    PictureBox
    es,你会知道该怎么做。你能解释一下在这种情况下你会怎么做,以及在
    Label
    s上应用相同的逻辑时会遇到什么麻烦吗?无论如何,不清楚你到底想做什么。点击标签后会发生什么?它应该显示哪个图像,为什么?使用picturebox可以设置图像可见性,而使用标签则不能。这正是困扰我的地方,但如果某些东西不可见,它也无法引发单击事件。请提出您的问题,并逐步解释应该发生什么以及您的困境。那么
    imgToLbl
    目前在做什么?你用这种方式写这个方法的想法是什么?它是将随机图像分配给表单中的每个标签,这很有效。你的“注释”让你看起来好像知道如果你在处理
    PictureBox
    es时该怎么做。你能解释一下在这种情况下你会怎么做,以及在
    Label
    s上应用相同的逻辑时会遇到什么麻烦吗?无论如何,不清楚你到底想做什么。点击标签后会发生什么?它应该显示哪个图像,为什么?使用picturebox可以设置图像可见性,而使用标签则不能。这正是困扰我的地方,但如果某些东西不可见,它也无法引发单击事件。请提出您的问题,并逐步解释应该发生什么以及您的困境。那么
    imgToLbl
    目前在做什么?你的想法是什么,用这种方法写的?它是将随机图像分配给表单中的每个标签,这是有效的