动态创建图片框网格
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;
我在一个包含字符的数组中有一组数组,例如
{{'#','.','#'}{'#','$','#'}{'#','@','#',}{'#','#', '#',}}
我希望能够根据数量动态变化的数量创建一个网格(它们在每个内部数组中始终具有相同数量的字符)
所以我希望内部数组是行,每个内部的字符都在它们自己的列上,所以它看起来像
"#.#"
“#$#”
“#@#”
"###"
所以设置此网格的最佳方法是什么,然后我想做的是用图片框填充所有这些单元格,这取决于它是什么符号,它将是一张特定的图片。
所以只是想知道最好的方法是什么 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;