2016-03-20 17 views
1

ボタンをクリックしてパネルにテキストボックスを追加する必要があります。クリックするたびに最後のテキストボックスの下に1つのテキストボックスが追加されます。しかし、それがパネルの高さを超えると、intがまだ同じであっても、突然テクスチャボックスの間のスペースが大きくなります。 ここまで私のコードです。 Controlパネルの上にテキストボックスを追加する

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

TopParentのスクロール位置に対して計算されます。

あなたはいつもあなたのアカウントに海流スクロール位置を取って、このようにそれを設定する必要がありますので、ごPanelの一番下までスクロールしている:あなたが持っているときAutoScrollPosition.Yであることを

tb.Top = tbY + panel1.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); 

     } 
関連する問題