惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
IT之家
IT之家
博客园 - 叶小钗
雷峰网
雷峰网
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
博客园 - 【当耐特】
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
大猫的无限游戏
大猫的无限游戏
Last Week in AI
Last Week in AI
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
阮一峰的网络日志
阮一峰的网络日志
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美

博客园 - 彭旭

VNC远程Gnome图形桌面(openEuler 20.03 LTS系统) [WPF]控件应用多个样式 [ASP.NET MVC] Real-time之HTML5 服务器发送事件(server-sent event) [WCF]DomainServices客户端操作异常处理 [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改 [Silverlight]键盘钩子KeyboardHook [Chrome扩展]屏蔽Google搜索结果重定向 Linq Distinct扩展 [Winform/C#]点击工作区域移动窗体 C#远程连接Oracle数据库(不安装客户端) RichTextBox.MouseWheel事件控制父控件Panel的内容滚动 ID3v1信息结构(MP3文件)的读取、修改(C#) 在线编辑Office文件 SQL优化 将自然数分解为若干连续的自然数 小写金额转换为大写金额 大数阶乘 查看文件夹大小及占用空间 VS2005开发WAP网站初识 - 彭旭 - 博客园
[WinForm] C#避免Panel(ScrollableControl)的子控件获取焦点...
彭旭 · 2011-12-23 · via 博客园 - 彭旭

重现

1.Panel设置AutoScroll=True。

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

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

解决

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

然后找了一篇:See Win App: Is your AutoScroll too auto?,蛋疼的是无法访问。不过还好有人把关键代码放出来了。

/// <summary>
/// 定义自动滚动定位委托
/// </summary>
/// <param name="ctrl">指定的自动滚动定位的控件</param>
/// <param name="p">指定的自动滚动定位的位置</param>
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);
}
}
/// <summary>
/// 设置指定的可滚动控件的自动滚动定位的位置。
/// </summary>
/// <param name="sender"></param>
/// <param name="p"></param>
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得为正数;获取的却是负数。