动态创建一个图片框网格
本文关键字:网格 一个 创建 动态 | 更新日期: 2023-09-27 18:12:47
在数组中有一组包含字符的数组,例如
{{'#','.','#'}{'#','$','#'}{'#','@','#',}{'#','#','#',}}
我希望能够根据这些字符的数量动态创建一个网格随着数量的变化(每个内部数组中的字符数量总是相同的)所以我想让内部数组以行为单位里面的字符都在各自的列上所以它看起来像
"# #"。
" # $ # "
"# @ #"
"# # #"
所以只是想知道最好的方法是什么,任何帮助/建议都是非常感谢
使用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;
在上面的代码中,我创建了一个字典用于字符和图像之间的映射。然后将输入数据塑形到一个包含图像而不是字符的列表中。当您将结果列表设置为DataGridView
的DataSource
时,您将看到这些图像而不是字符。
如果出于某种原因您不想使用匿名对象,您可以简单地创建一个具有任意数量列的动态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;