简体   繁体   中英

c# Panel with autoscroll - Srollbar position reset on a control focus

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.

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

Thanks, this works great except I had to adjust for the panel's padding at the bottom. Just an FYI to any others who may be seeing some offsets.

protected override System.Drawing.Point ScrollToControl(System.Windows.Forms.Control activeControl)
{
    Point retPt = DisplayRectangle.Location;
    retPt.Offset(new Point(-1*Padding.Left, -1*Padding.Bottom));

    return retPt;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM