我正在创建一个程序来搜索固定来源的音乐专辑,并将结果列表作为JSON返回。我已经成功地学会了反序列化这个对象,所以它可以在C#中使用,但有一点我正在努力。
目前,我手动为结果创建了几个图片框(用于专辑封面)和标签(用于信息),但结果数量必然会根据用户搜索而有所不同。
是否有办法可以通过每个结果进行“for each
”循环,并且可以通过编程方式创建必要的图片框并标记组合,以便满足更少或更多的结果?
我问,因为我看过应用程序执行搜索,当然所有结果都不能填充预设标签/文本框?
for each result in results:
{
Create Picture Box;
Create Labels;
}
答案 0 :(得分:1)
是的,你可以这样做。假设您的代码位于WinForm
Form
,请使用PictureBox
,Label
和Controls.Add
:
foreach (var result in results){
PictureBox pb = ...;
//initialize your PictureBox
pb.Location = ...;
pb.Image = ...;
pb.Name = ...;
// etc, then add
Controls.Add(pb);
//similarly for Label
Label lbl = ...;
//initialize your Label
lbl.Location = ...;
lbl.Text = ...;
lbl.Name = ...;
// etc, then add
Controls.Add(lbl);
}
动态创建中需要注意的一部分是Location
。确保新控件'位置不重叠。如果没有,它们可能看起来像单一控件,因为多个控件放在一起。
注意:要更系统地执行此操作,请将PictureBox
和Label
放入FlowLayoutPanel
,和/或使用UserControl
创建PictureBox
,一个Label
就可以了。然后我们只需要逐个添加UserControl
,直接添加到Form
或FlowLayoutPanel
(请阅读此答案下方的评论)。我的回答是一种简单的方法,只是为了指出这样的想法:是的,可以用C#WinForm
创建动态控件。