The problem concerns TableLayoutPanel scrolling.
You have to use a Panel for scrolling instead of TableLayoutPanel.
Here is an example to solve this problem (for vertical scrolling) :

  • Set your TableLayoutPanel properties as follow :
    • Dock = DockStyle.Top
    • AutoSize = true
    • AutoSizeMode = AutoSizeMode.GrowAndShrink
    • AutoScroll = false.
  • Put your TableLayoutPanel into a Panel with properties :
    • Dock = DockStyle.Fill
    • AutoScroll = true
    • AutoSize = false.

when you remove the dynamic controls, you need to remove the extra rows that was inserted during the addition and re-size the table layout panel height to smaller than scroll container height.

During the addition the table layout panel height would have increased, which handled by the scroll container; but when you remove the controls, the table layout panel height doesn't reduce it's height to fit the scroll container.

One way to do this is to give fixed height to the rows and set the table layout panel seize set to "Auto".


One of the easiest and funniest solution is to just disable and enable tableLayoutPanel1.AutoScroll

In your Deleting procedure code add at the end these codes :

    tableLayoutPanel1.AutoScroll = False
    tableLayoutPanel1.AutoScroll = True