所以我需要通过单击按钮将文本框添加到面板。每次单击都会在最后一个文本框下添加一个文本框,依此类推。但是当它越过面板高度时,它突然在texbox之间产生更大的空间,即使int仍然是相同的。 到目前为止,这是我的代码。
List<TextBox> textboxes = new List<TextBox>();
private void button1_Click(object sender, EventArgs e)
{
tbY += 30;
TextBox tb = new TextBox();
tb.Left = 3;
tb.Top = tbY;
tb.Font = new Font("Verdana", 12, FontStyle.Bold);
tb.Size = new Size(325, 25);
tb.BorderStyle = BorderStyle.None;
button1.Top = tbY;
panel1.Controls.Add(tb);
textboxes.Add(tb);
ScrollToBottom(panel1);
}
答案 0 :(得分:0)
Top
的{{1}}是相对于其Control
的滚动位置计算的。
您总是滚动到Parent
的底部,因此您需要将其设置为这样,考虑到当前的滚动位置:
Panel
请注意,当您向向下滚动时,tb.Top = tbY + panel1.AutoScrollPosition.Y;
为否定,因此我们需要添加它!
答案 1 :(得分:0)
您也可以使用flowLayoutPanel来实现此目的。在flowLayoutPanel上使用以下属性,它将按预期工作。 (无需进行手动计算)
List<TextBox> textboxes = new List<TextBox>();
public Form1()
{
InitializeComponent();
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
flowLayoutPanel1.WrapContents = false;
flowLayoutPanel1.AutoScroll = true;
}
private void button1_Click(object sender, EventArgs e)
{
TextBox tb = new TextBox();
tb.Left = 3;
tb.Font = new Font("Verdana", 12, FontStyle.Bold);
tb.Size = new Size(325, 25);
tb.Text = tb.Top.ToString();
tb.BorderStyle = BorderStyle.None;
flowLayoutPanel1.Controls.Add(tb);
textboxes.Add(tb);
}