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



我想以几个动态组框的形式显示 SqlDataReader 对象的每一行的结果,这些结果与现有面板相似。

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

因此,当分组框超出面板的水平边界时,它将被放置在新的"行"上,位于以前的分组框下。

这是我的代码:

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. 动态添加的分组框的"换行符",一旦其组合宽度超过面板的宽度,并且没有水平滚动条
  2. 当分组框的所有"行"的总高度超过面板的高度时,垂直滚动条。

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

提前感谢您的帮助。

使用 FlowLayoutPanel 而不是 Panel,并按这种方式设置其属性(如果尚未设置(:

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

最新更新