在面板高度上添加文本框

时间:2016-03-20 10:07:43

标签: c#

所以我需要通过单击按钮将文本框添加到面板。每次单击都会在最后一个文本框下添加一个文本框,依此类推。但是当它越过面板高度时,它突然在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);
}

2 个答案:

答案 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);

        }