根据项目的大小在面板上添加垂直滚动条和 "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);
}
总而言之,我想做两件事:
- A "line break" 用于动态添加的组框,一旦它们的组合宽度超过面板的宽度,并且没有水平滚动条
- 当所有 "lines" 组框的组合高度超过面板高度时的垂直滚动条。
提供的代码并没有阻止出现水平滚动条,如果j = j + 220行没有注释,两个滚动条都会出现,但没有换行符。
在此先感谢您的帮助。
使用 FlowLayoutPanel instead of a Panel,并以此方式设置其属性(如果尚未设置):
- 自动滚动:正确;在需要时添加垂直滚动条
- 包装内容:正确;允许内容在需要时水平换行
我想以几个动态组框的形式显示 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);
}
总而言之,我想做两件事:
- A "line break" 用于动态添加的组框,一旦它们的组合宽度超过面板的宽度,并且没有水平滚动条
- 当所有 "lines" 组框的组合高度超过面板高度时的垂直滚动条。
提供的代码并没有阻止出现水平滚动条,如果j = j + 220行没有注释,两个滚动条都会出现,但没有换行符。
在此先感谢您的帮助。
使用 FlowLayoutPanel instead of a Panel,并以此方式设置其属性(如果尚未设置):
- 自动滚动:正确;在需要时添加垂直滚动条
- 包装内容:正确;允许内容在需要时水平换行