【无标题】解决 Panel 滚动条或者控件的滚动条跳动问题

需求及问题

昨天有个需求,解决C#Panel滚动条在子控件点击或刷新自动变化位置的问题,经过看到有客友说重写Panel的 ScrollToControl 函数如

protected override System.Drawing.Point ScrollToControl(Control activeControl)
{
		return this.AutoScrollPosition;
}

调试

我尝试后发现没有作用,不知道问题点出在哪里。
经过一番调试,总的就是返回 AutoScrollPosition 值。
只需要在点击前获取 AutoScrollPosition 值,记录此时的 AutoScrollPosition 为一个 Point Pos点;
当退出时,再重新赋值给 AutoScrollPosition ,可保当前位置滚动条位置不变。
逻辑很清晰也很合理,接着问题来了,无论我怎么操作 AutoScrollPosition = Pos的时候,
AutoScrollPosition 的属性 IsEmpty 总为 true,X、Y 值,检查 Pos 的坐标没有错。
再经过一番查找,才发现问题出在 坐标符号上。
Panel滚动条的左上角为(0, 0),越往右下数值变大,而符号为负,即(-X, -Y);
这也是 AutoScrollPosition 的坐标属性。

原因

当pos = AutoScrollPosition 时,Pos的值也带 - 符号,例如 pos = (-100, -100);
当再把值返还给 AutoScrollPosition 时,却不是 AutoScrollPosition = pos ;
而是 AutoScrollPosition = new point(-pos.X, -Pos.Y) 的类似操作,此时的前提是滚动条左上为0,右下为负。当然也可以直接取 Pos的绝对值。

结论:

AutoScrollPosition 赋值对于正数是直接转换为自己的坐标,对于直接传入的负坐标,赋值就失败。即 AutoScrollPosition = new point(X的绝对值,Y的绝对值);

咱是一只小小攻城狮,体验调试带来的快感,转载请标出处,谢谢您的理解。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值