动态创建图片框网格

Dynamically create a grid of pictureboxs

我在一个包含字符的数组中有一组数组,例如
{{'#','.','#'}{'#','$','#'}{'#','@','#',}{'#','#', '#',}}
我希望能够根据数量动态变化的数量创建一个网格(它们在每个内部数组中始终具有相同数量的字符) 所以我希望内部数组是行,每个内部的字符都在它们自己的列上,所以它看起来像

"#.#"
“#$#”
“#@#”
"###"

所以设置此网格的最佳方法是什么,然后我想做的是用图片框填充所有这些单元格,这取决于它是什么符号,它将是一张特定的图片。

所以只是想知道最好的方法是什么 help/advice 非常感谢

使用DataGridView是最简单的选择。例如:

var images = new Dictionary<char, Image>()
{
    {'#', Properties.Resources.Image1},
    {'.', Properties.Resources.Image2},
    {'$', Properties.Resources.Image3},
    {'@', Properties.Resources.Image4},
};
var data = new List<string>() { "#.#", "#$#", "#@#", "###" };
var list = data.Select(x => new
                       {
                           A = images[x[0]],
                           B = images[x[1]],
                           C = images[x[2]]
                       }).ToList();
this.dataGridView1.DataSource = list;

在上面的代码中,我创建了一个字典来映射字符和图像。然后将输入数据整形为包含该图像而不是字符的列表。当您将结果列表设置为 DataSource of DataGridView 时,您将看到这些图像而不是字符。


如果出于任何原因您不想使用匿名对象,您可以简单地创建一个具有任意数量列的动态 DataTable

var images = new Dictionary<char, Image>()
{
    {'#', Properties.Resources.Image1},
    {'.', Properties.Resources.Image2},
    {'$', Properties.Resources.Image3},
    {'@', Properties.Resources.Image4},
};
char[][] data = new char[][]{ 
    new char[] {'#','.','#'},
    new char[] {'#','$','#'},
    new char[] {'#','@','#'},
    new char[] {'#','#','#'},
};
var dt = new DataTable();
for (int i = 0; i < data.Max(x => x.Count()); i++)
    dt.Columns.Add(string.Format("C{0}", i), typeof(Image));
data.ToList().ForEach(a => dt.Rows.Add(a.Select(x=>images[x]).ToArray()));
this.dataGridView1.DataSource = dt;