这适用于Windows窗体。
Panel有AutoScroll = True
我将面板动态添加到主面板,最终超出主面板显示矩形。 然后将标签,组合框和文本框添加到添加的面板中。
如果我选择一个组合框或文本框,它会将主面板滚动条位置重置为0,并且组合框的下拉菜单也将放置在屏幕X,Y上,如果滚动条没有复位。
我正在考虑在选择控件时保存滚动位置。测试后,似乎滚动位置还没有重置,所以我可以在这里捕获它。然后在希望面板的某些事件上恢复滚动位置。 我正在努力找出我将用于恢复滚动位置的确切事件。我也希望当我这样做时,下拉菜单会被放置在正确的x,y上。
更好的解决方案是基于面板控件创建自定义控件并可能覆盖事件?这样,每次使用滚动面板时,我都不需要保存滚动位置,从而使我的项目变得杂乱无章。
答案 0 :(得分:32)
我找到了我在这里遇到的问题的答案: 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;
}
}
答案 1 :(得分:1)
谢谢,除非我必须调整底部面板的填充,否则这很有效。只是对可能看到一些抵消的其他人的一个FYI。
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;
}