c#带自动滚动的面板 - 控制焦点上的Srollbar位置重置

Unt*_*ble 15 c# winforms

这是一个Windows窗体.

Panel具有AutoScroll = True

我正在动态添加面板到主面板,最终超出主面板显示矩形.然后将标签,组合框和文本框添加到添加的面板.

如果我选择一个组合框或文本框,它会将主面板滚动条位置重置为0,并且组合框的下拉菜单将放置在屏幕X,Y上,如果滚动条没有重置,它应该在那里.

我正在考虑在选择控件时保存滚动位置.测试后,似乎滚动位置还没有重置,所以我可以在这里捕获它.然后在希望面板的某些事件上恢复滚动位置.我试图找出我将用于恢复滚动位置的确切事件.我也希望当我这样做时,下拉菜单将被放置在正确的x,y.

一个更好的解决方案是创建一个基于面板控件的自定义控件,并可能覆盖一个事件?这样我每次使用滚动面板时都不需要保存滚动位置,从而使我的项目变得杂乱无章.

Unt*_*ble 32

我找到了我在这里遇到的问题的答案: 答案

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于后代(如果链接被破坏):1.子类面板2.重写ScrollToControl()以返回this.DisplayRectangle.Location (4认同)