【发布时间】:2016-02-18 14:30:39
【问题描述】:
我在 flowLayoutPanel 中捕获 Scroll 事件,其中包含一堆控件(文本框)。如果我用鼠标移动滚动条,则正确捕获 Scroll 事件。但是,如果使用 tab 键从控件跳转到控件并且滚动条移动以使文本框获得焦点,则不会引发事件。 这种情况下怎么办,不管怎么修改卷轴我都真的需要抓拍。
我上传了一个可以显示问题的简单项目http://1drv.ms/1UabHkv
【问题讨论】:
我在 flowLayoutPanel 中捕获 Scroll 事件,其中包含一堆控件(文本框)。如果我用鼠标移动滚动条,则正确捕获 Scroll 事件。但是,如果使用 tab 键从控件跳转到控件并且滚动条移动以使文本框获得焦点,则不会引发事件。 这种情况下怎么办,不管怎么修改卷轴我都真的需要抓拍。
我上传了一个可以显示问题的简单项目http://1drv.ms/1UabHkv
【问题讨论】:
您正在寻找 GotFocus 活动。还有一个 LostFocus 事件。 它适用于点击、标签、shift+标签等
textBox1.GotFocus += textBox1_ScrollEvent;
textBox1_ScrollEvent 是滚动的事件处理程序
【讨论】:
我认为您没有绑定到正确的事件。 ScrollableControl.Scroll Event 状态的文档:
当用户通过与滚动条交互滚动通过客户区时,或者当用户在控件之间导航并且活动控件滚动到视图中时,会发生 Scroll 事件。当您编写滚动客户区的代码(例如设置 AutoScrollPosition 属性)时,也会发生 Scroll 事件。
编辑:
看来 MS 文档确实不正确。我已经使用您的示例项目和我创建的示例项目进行了测试,并且我遇到了相同的行为,Scroll 事件没有在选项卡上甚至在鼠标滚轮上触发。
似乎最好的做法是实现您自己的滚动条并为您的Panel 关闭Autoscroll。
有关 mroe 信息,请参阅以下 SO 问题:How to use ScrollableControl with AutoScroll set to false
【讨论】: