C# 尝试以随机顺序将图片读入flowlayoutpanel
我正试图为自己制作一个类似于记忆卡游戏的程序,但出于教育目的,你要匹配这个词和这个词的定义。到目前为止,我成功地理解了以下几点:C# 尝试以随机顺序将图片读入flowlayoutpanel,c#,C#,我正试图为自己制作一个类似于记忆卡游戏的程序,但出于教育目的,你要匹配这个词和这个词的定义。到目前为止,我成功地理解了以下几点: 我正在使用FlowLayoutPanel作为PictureBoxes,我有150多个单词和描述(300多张图片),因此滚动工作正常,它们彼此相邻 我可以用按钮1_单击图片面板1乘1删除,但我必须删除1个单词和1个描述,否则看起来很奇怪。只要它们成对移除,这就不是问题 我想做的和我一直坚持的是: 当我阅读图片时,我已经希望它们是随机顺序的,例如,我提供的图片只有2个单
FlowLayoutPanel
作为PictureBox
es,我有150多个单词和描述(300多张图片),因此滚动工作正常,它们彼此相邻- 当我阅读图片时,我已经希望它们是随机顺序的,例如,我提供的图片只有2个单词+描述,我希望单词或描述(或两者)是随机顺序的,这样正确的一个就不必彼此相邻,但是因为它是随机的,可能发生的可能性很小(读取方式如下:pic1、pic1a、pic2、pic2a……picN、picNa)
- 当我点击与描述相匹配的单词时(比如用名称引用它?点击pic1和pic1a),这2个
es将被删除,直到没有PictureBox
es可删除为止PictureBox
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void pbClick(object sender, EventArgs e)
{
var pictureBox = (PictureBox)sender;
int index = flowLayoutPanel1.Controls.GetChildIndex(pictureBox);
flowLayoutPanel1.Controls.Remove(pictureBox);
//MessageBox.Show(index.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog d = new OpenFileDialog();
// allow multiple selection
d.Multiselect = true;
// filter the desired file types
d.Filter = "JPG |*.jpg|PNG|*.png|BMP|*.bmp";
// show the dialog and check if the selection was made
if (d.ShowDialog() == DialogResult.OK)
{
foreach (string image in d.FileNames)
{
// create a new control
PictureBox pb = new PictureBox();
// assign the image
pb.Image = new Bitmap(image);
// stretch the image
pb.SizeMode = PictureBoxSizeMode.StretchImage;
// set the size of the picture box
pb.Height = pb.Image.Height;
pb.Width = pb.Image.Width;
// add the control to the container
flowLayoutPanel1.Controls.Add(pb);
pb.Click += pbClick;
}
}
}
}
下面的代码模拟字符串和图片将同一列表随机化两次。然后从两个随机列表中一次删除一对
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Item> items = new List<Item>() {
new Item() { name = "a", number = 1 },
new Item() { name = "b", number = 2 },
new Item() { name = "c", number = 3 },
new Item() { name = "d", number = 4 },
new Item() { name = "e", number = 5 },
new Item() { name = "f", number = 6 },
new Item() { name = "g", number = 7 },
new Item() { name = "h", number = 8 },
new Item() { name = "i", number = 9 },
new Item() { name = "j", number = 10 },
};
Random rand = new Random();
List<Item> randLetters = items.Select((x, i) => new { x = x, rand = rand.Next() }).OrderBy(x => x.rand).Select(x => x.x).ToList();
List<Item> randNumbers = items.Select((x, i) => new { x = x, rand = rand.Next() }).OrderBy(x => x.rand).Select(x => x.x).ToList();
//delete random pairs
for (int i = randLetters.Count - 1; i >= 0; i--)
{
//find matching item in randNumbers and remove from list.
randNumbers = randNumbers.Where(x => x.name != randLetters[i].name).ToList();
randLetters.RemoveAt(i);
}
}
}
public class Item
{
public string name { get; set; }
public int number { get; set; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
列表项=新列表(){
新项(){name=“a”,number=1},
新项(){name=“b”,number=2},
新项(){name=“c”,number=3},
新项(){name=“d”,编号=4},
新项(){name=“e”,编号=5},
新项(){name=“f”,number=6},
新项(){name=“g”,number=7},
新项(){name=“h”,number=8},
新项(){name=“i”,number=9},
新项(){name=“j”,number=10},
};
Random rand=新的Random();
列出randLetters=items.Select((x,i)=>new{x=x,rand=rand.Next()}).OrderBy(x=>x.rand.Select(x=>x.x).ToList();
列出randNumbers=items.Select((x,i)=>new{x=x,rand=rand.Next()}).OrderBy(x=>x.rand.Select(x=>x.x).ToList();
//删除随机对
对于(int i=randLetters.Count-1;i>=0;i--)
{
//在RandNumber中找到匹配项并从列表中删除。
randNumbers=randNumbers.Where(x=>x.name!=randLetters[i].name.ToList();
randLetters.RemoveAt(i);
}
}
}
公共类项目
{
公共字符串名称{get;set;}
公共整数{get;set;}
}
}
fixed and Sorry感谢您的帮助,并对您的更正进行了编辑。这样更好,我对您的帖子进行了更多的编辑。你能不能再进一步编辑一下,以便更容易理解你需要什么帮助?是的,我会尽力提供进一步的信息。感谢您的支持。我在您的代码中没有看到任何将单词图片与定义图片相关联的内容。你需要建立一种关系。