2016-03-20 3 views
1

Поэтому мне нужно добавить текстовые поля на панель одним нажатием кнопки. Каждый клик добавляет одно текстовое поле под последним и так далее. Но когда он перешагивает высоту панели, он неожиданно делает больше пространства между texboxes, даже если 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

Top из Control рассчитывается относительно положения прокрутки его Parent.

Вы всегда прокрутки в нижней части Panel, так что вам нужно, чтобы установить его, как это, принимая curent позицию прокрутки во внимание:

tb.Top = tbY + panel1.AutoScrollPosition.Y; 

Обратите внимание, что AutoScrollPosition.Y является отрицательным, когда у вас есть прокручивается вниз, поэтому нам нужно добавить его!

+0

Это работает. Огромное спасибо. –

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

     } 
Смежные вопросы