在Visual C#中为列表中的每个对象创建一个图片框和标签

时间:2016-03-19 09:53:42

标签: c# winforms visual-studio

我正在创建一个程序来搜索固定来源的音乐专辑,并将结果列表作为JSON返回。我已经成功地学会了反序列化这个对象,所以它可以在C#中使用,但有一点我正在努力。

目前,我手动为结果创建了几个图片框(用于专辑封面)和标签(用于信息),但结果数量必然会根据用户搜索而有所不同。

是否有办法可以通过每个结果进行“for each”循环,并且可以通过编程方式创建必要的图片框并标记组合,以便满足更少或更多的结果?

我问,因为我看过应用程序执行搜索,当然所有结果都不能填充预设标签/文本框?

for each result in results:
{
    Create Picture Box;
    Create Labels;
}

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做。假设您的代码位于WinForm Form,请使用PictureBoxLabelControls.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。确保新控件'位置不重叠。如果没有,它们可能看起来像单一控件,因为多个控件放在一起。

注意:要更系统地执行此操作,请将PictureBoxLabel放入FlowLayoutPanel,和/或使用UserControl创建PictureBox,一个Label就可以了。然后我们只需要逐个添加UserControl,直接添加到FormFlowLayoutPanel(请阅读此答案下方的评论)。我的回答是一种简单的方法,只是为了指出这样的想法:是的,可以用C#WinForm创建动态控件。