根据项目的大小在面板上添加垂直滚动条和 "line break"

Adding a vertical scrollbar and "line break" on a Panel depending on its items' sizes

我想以几个动态组框的形式显示 SqlDataReader 对象的每一行的结果,并添加到现有面板。

我还希望当其中一个组框在包含面板中引起水平溢出时自动换行,而不是一直从左到右一个接一个地添加。

因此,当组框超出面板的水平边界时,它会被放置在新的 "line" 上,而不是在先前的组框下方。

这是我的代码:

SqlCommand cmd = new SqlCommand(sqlString, cnx); //return;
SqlDataReader myReader;
myReader = cmd.ExecuteReader(); 
int i = 0; int j = 0;
int sw = Screen.PrimaryScreen.Bounds.Width;//sw=1920
int sh = Screen.PrimaryScreen.Bounds.Height;//sh=1080

panel1.HorizontalScroll.Maximum = 0;
panel1.AutoScroll = false;
panel1.VerticalScroll.Visible = false;
panel1.AutoScroll = true;

while (myReader.Read())
{
    MessageBox.Show("Results : \n Distinct values : " + myReader["column1"].ToString() + " Occurence number  : " + myReader["nbre_column1"].ToString());                        
    //I can show all values including on myReader on this message box

    GroupBox resultGroupBox = new GroupBox();
    resultGroupBox.Size = new System.Drawing.Size((sw * 20) / 100, (sh * 20) / 100);
    resultGroupBox.Location = new Point(44 + i, 36);
    i = i + 390;
    //j = j + 220;
    panel1.Controls.Add(resultGroupBox);
}

总而言之,我想做两件事:

  1. A "line break" 用于动态添加的组框,一旦它们的组合宽度超过面板的宽度,并且没有水平滚动条
  2. 当所有 "lines" 组框的组合高度超过面板高度时的垂直滚动条。

提供的代码并没有阻止出现水平滚动条,如果j = j + 220行没有注释,两个滚动条都会出现,但没有换行符。

在此先感谢您的帮助。

使用 FlowLayoutPanel instead of a Panel,并以此方式设置其属性(如果尚未设置):

  • 自动滚动:正确;在需要时添加垂直滚动条
  • 包装内容:正确;允许内容在需要时水平换行