Ich muss ein Memory-Spiel machen, aber der Code gibt einen Fehler, wenn Etiketten angeklickt werden und ich brauche eine Seite zu färben und ein Bild anzuzeigen wenn angeklickt.So zeigen Sie ein Bild in einem Etikett mit einem Klickereignis (Memory Game)
Dies ist der Code:
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 Memory
{
public partial class frmMain : Form
{
Random random = new Random();
//images
List<Image> icons = new List<Image>()
{
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\apple.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\apple.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\bananas.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\bananas.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\grapes.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\grapes.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\kokosnoot.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\kokosnoot.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\lemon.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\lemon.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\orange.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\orange.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\peach.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\peach.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pear.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pear.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pepper.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pepper.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pineapple.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\pineapple.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\strawberry.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\strawberry.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\watermelon.png"),
Image.FromFile(@"C:\Users\thomas\Documents\Visual Studio 2015\Projects\Memory\Resources\watermelon.png"),
};
//pictures to labels
public void AssignPicsToLabels()
{
foreach (Control control in tableLayoutPanel1.Controls)
{
Label iconLabel = control as Label;
if (iconLabel != null)
{
int randomNumber = random.Next(icons.Count);
iconLabel.Image = icons[randomNumber];
icons.RemoveAt(randomNumber);
}
}
}
public frmMain()
{
InitializeComponent();
AssignPicsToLabels();
}
//Images randomizing
private void RandomizeImages()
{
Shuffle(icons);
int Index = 0;
foreach (Control control in tableLayoutPanel1.Controls)
{
var imageLabel = control as Label;
if (imageLabel == null)
{
continue;
}
imageLabel.Tag = Index;
Index++;
}
}
private static Random rng = new Random();
private static void Shuffle<T>(List<T> list)
{
int count = list.Count;
while (count > 1)
{
count--;
int L = rng.Next(count + 1);
T value = list[L];
list[L] = list[count];
list[count] = value;
}
}
private void label_Click(object sender, EventArgs e)
{
Label clickedLabel = sender as Label;
if (clickedLabel != null)
{
var Index = (int)clickedLabel.Tag;
clickedLabel.Image = icons[Index];
clickedLabel.ForeColor = Color.Black;
}
}
}
}
Es gibt einen Fehler hier:
var Index = (int)clickedLabel.Tag
Nun, es ist nicht möglich, 'string' in' int' zu transformieren, nur mit expliziter Umwandlung '(int) str', weil' string' * nicht * ein 'int' ist. Sie könnten 'Convert.ToInt32 (" ")' stattdessen verwenden – Fabjan
Ich habe es so: 'var Index = Convert.ToInt32 (clickedLabel.Tag);' hat nicht funktioniert – Rexon222
Sie scheinen nicht 'RandomizeImages' Methode, die Index mit Label-Tag assoziiert. Stattdessen verwenden Sie 'AssignPicsToLabels', was etwas anderes macht und auch die Icon-Liste zerstört. –