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的索引。但我不知道怎么做。我可能完全错了,但我想听到一个很好的方法。有人能帮我吗?我现在真的很糊涂
以下是它应该完成的步骤:
列表中保留对控件的引用,并以编程方式将它们添加到父控件中-这将为您节省(很好,会为您节省: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
目前在做什么?你的想法是什么,用这种方法写的?它是将随机图像分配给表单中的每个标签,这是有效的