C# Panel with autoscroll – Srollbar position reset on a control focus

cwinforms

This is for a windows form.

Panel has AutoScroll = True

I am adding panels dynamically to the main panel which end up exceeding the main panel display rectangle.
Then adding Labels, Combo Boxes, and Text Boxes to the added panels.

If I select a Combo Box or Text Box it resets the main panels scroll bar position to 0 and also the drop down menu for a Combo Box will be placed on the screen X,Y where it should be if the scrollbar had not reset.

I am thinking of saving the scroll position when a control is selected. After testing it seems the scroll position is not reset yet so I am able to capture it here. Then restoring the scroll position on some event of the panel I hope. I am trying to find out exactly what event I would use to restore the scroll position. I also hope that the drop down menu will be placed at the correct x,y when I do this.

A better solution would be to create a custom control based off the panel control and override an event possibly? This way I would not need to clutter up my project with saving the scroll position every time I use a scrolling panel.

Best Answer

I found the answer to the problem I was having here: Answer

public class CustomPanel : System.Windows.Forms.Panel
{
    protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
    {
        // Returning the current location prevents the panel from
        // scrolling to the active control when the panel loses and regains focus
        return this.DisplayRectangle.Location;
    }
}
Related Topic