C#_自動でスクロールバーを一番下に設定 ( 追記 )

コントロー ルを追加していくプログラムにおいて、
追加後にスクロールバーを一番下に持ってくるソース。

 


動的コントロー ルの Location を 設定する時、
スクロール分引く必要あり

スクロールされた状態で ↓ コードを実行すると、

textBox.Location = new Point(10, 30 + (count * 40));

textBox の座標は指定した値にスクロール分が加算された値となる。

スクロールされた状態で panel上座標(10, 10)クリックした座標を取得した場合、
e.Location で取得した座標は スクロール分が加算されている。

 

ex)
スクロールバーを一番下に設定する。
Add ボンタン も下に移動。

    private int count = 0;

    private void buttonAdd_Click(object sender, EventArgs e)
    {
        int scrollValueY = panel1.VerticalScroll.Value;

        // textBox 生成
        TextBox textBox = new TextBox();
        textBox.Location = new Point(10, 30 + (count * 40) - scrollValueY);
        textBox.Size = new Size(300, 19);
        panel1.Controls.Add(textBox);

        //Add ボタンを一番下に
        buttonAdd.Location = new Point(345, 30 + (count * 40) - scrollValueY);

        // スクロールバー位置設定
        int x = panel1.AutoScrollPosition.X;
        int y = panel1.Height + scrollValueY;
        panel1.AutoScrollPosition = new Point(x, y);

        ++count;
    }

f:id:koshinRan:20171111162957p:plain

※ HorizontalScroll ( 水平スクロールバー ) は付かない前提のコード。
水平バーも考慮するなら、 HorizontalScroll を VeriticalScroll と同様に書く。

 

以上。