博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[WinForm] C#避免Panel(ScrollableControl)的子控件获取焦点时滚动条自动滚动
阅读量:7228 次
发布时间:2019-06-29

本文共 1009 字,大约阅读时间需要 3 分钟。

重现

1.Panel设置AutoScroll=True。

2.在Panel内放置控件,比如文本框、ListBox,让其出现滚动条。

3.在选中子控件(子控件获得焦点)时,滚动条可能会自动滚动。

 

解决

试过在子控件的Enter事件里获取滚动条的位置,然后在MouseDown事件里将滚动后的滚动条再复位,不过感觉效果不行。

然后找了一篇:,蛋疼的是无法访问。不过还好有人把关键代码放出来了。

///  /// 定义自动滚动定位委托 ///  /// 指定的自动滚动定位的控件 /// 指定的自动滚动定位的位置 protected delegate void AutoScrollPositionDelegate(ScrollableControl ctrl, Point p); private void TextBox1_Enter(EventArgs e) {
if (Parent is Panel) {
Point p = (this.Parent as Panel).AutoScrollPosition; AutoScrollPositionDelegate del = new AutoScrollPositionDelegate(SetAutoScrollPosition); Object[] args = { this.Parent as Panel, p}; BeginInvoke(del, args); } } /// /// 设置指定的可滚动控件的自动滚动定位的位置。 /// /// /// private void SetAutoScrollPosition(ScrollableControl sender, Point p) {
p.X = Math.Abs(p.X); p.Y = Math.Abs(p.Y); sender.AutoScrollPosition = p; }

Panel.AutoScrollPosition:获取或设置自动滚动定位的位置。需注意,设置的时候X,Y得为正数;获取的却是负数。

转载于:https://www.cnblogs.com/ainijiutian/archive/2011/12/23/2299172.html

你可能感兴趣的文章
vue+vuex+axios+echarts画一个动态更新的中国地图
查看>>
5.8 volumetric post-processing--game programming gems5 笔记
查看>>
8086的地址空间
查看>>
Android开发动画效果被遮掉的解决方法
查看>>
Apache2.2.17源码编译安装以及配置虚拟主机
查看>>
2017年开发语言排名
查看>>
读二进制表的显示 Binary Watch
查看>>
我的友情链接
查看>>
linux基础:10、基础命令(4)
查看>>
linux中强大的screen命令
查看>>
放开那个程序员
查看>>
构建高性能数据库缓存之Redis(一)
查看>>
测试驱动开发
查看>>
解决MySQL不允许从远程访问
查看>>
puppet介绍及基于httpd实例部署
查看>>
UML常用工具之三--RSA
查看>>
iis7 appcmd的基础命令及简单用法
查看>>
用脚本实现移动某目录下文件名符合指定规则的文件到另一个目录的功能
查看>>
关于SQL镜像配置报错
查看>>
终于找到解决方案了,Qt的Model/View Framework解析
查看>>