C# 如何根据之前从代码创建的面板的位置创建面板?

C# How can I create a panel according the location of the previous panel created from code?

下面一张照片的示例。我想为我数据库中的每个人创建一个面板,每个面板都包含有关该人的信息。我的疑问不是如何制作,而是如何根据前一个的位置添加一个?例如在线购物车

最简单的方法是创建一个 FlowLayoutPanel 并向其中添加项目,流式布局面板将负责它们的定位。只需设置其自动滚动:

flowLayoutPanel1.AutoScroll = true;

和流向:

flowLayoutPanel1.FlowDirection=FlowDirection.TopDown;

您可以 google 关于 flowlayout 面板并找到许多示例,this is one of them

第二个选项是在彼此下方添加面板并向带有停靠栏(左侧或右侧)的表单添加 VertialScrollBar,然后您应该自己处理滚动。

至于将每个面板添加到之前的面板下方(第一种方式不需要,因为 flowlayoutpanel 会处理它)

假设您的面板位于名为 panels

的数组中
for(int i=0;i<panels.Length;i++)
{
    int top = i == 0 ? 0 : panels[i - 1].Top + panels[i - 1].Width; //this line not needed in flowlayout panel
    panels[i].Location = new Point(0, top);//this line not needed in flowlayout panel
    Parent.Controls.Add(panels[i]); //parent can be your form, a panel, ...
}

如果是我,首先我会创建一个 UserControl 来表示一个项目,然后为了列出它,我会使用 PanelAutoScroll 以及 TableLayoutPanel 在其中(AutoSize 设置为 true,1 列和 1 行)。

像这样,您只需将控件(您将使用您创建的 UserControl)添加到 TableLayoutPanel