- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 ScrollableControl(更准确地说是面板)时遇到了问题。当鼠标指针直接在滚动条上滚动时,会正确触发 Scroll 事件。
但是当使用鼠标滚轮滚动时,Panel 会正确滚动但不会触发 Scroll 事件。
此外,当 Panel 内的越界控件获得焦点时,Panel 会正确滚动以将控件置于 View 中,但同样,在这种情况下,不会触发 Scroll 事件。
你们有遇到过同样的事情吗?您找到解决方案了吗?
谢谢!
最佳答案
更新:我现在已经测试过 - 这不起作用!
我还没有测试过,但是根据这个:http://www.codeproject.com/Articles/7452/ScrollableControl-with-Scroll-Events一种选择是扩展 ScrollableControl 的功能
代码如下:
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
namespace Foretel.SelectAGrid
{
/// <summary>
/// Adds the missing scroll events to the scrollable control!
/// Written by Martin Randall - Thursday 17th June, 2004
/// </summary>
public class ScrollableControlWithScrollEvents : ScrollableControl
{
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
/// <summary>
/// Horizontal scroll position has changed event
/// </summary>
public event ScrollEventHandler HorzScrollValueChanged;
/// <summary>
/// Vertical scroll position has changed event
/// </summary>
public event ScrollEventHandler VertScrollValueChanged;
/// <summary>
/// Intercept scroll messages to send notifications
/// </summary>
/// <param name="m">Message parameters</param>
protected override void WndProc(ref Message m)
{
// Let the control process the message
base.WndProc (ref m);
// Was this a horizontal scroll message?
if ( m.Msg == WM_HSCROLL )
{
if ( HorzScrollValueChanged != null )
{
uint wParam = (uint)m.WParam.ToInt32();
HorzScrollValueChanged( this,
new ScrollEventArgs(
GetEventType( wParam & 0xffff), (int)(wParam >> 16) ) );
}
}
// or a vertical scroll message?
else if ( m.Msg == WM_VSCROLL )
{
if ( VertScrollValueChanged != null )
{
uint wParam = (uint)m.WParam.ToInt32();
VertScrollValueChanged( this,
new ScrollEventArgs(
GetEventType( wParam & 0xffff), (int)(wParam >> 16) ) );
}
}
}
// Based on SB_* constants
private static ScrollEventType [] _events =
new ScrollEventType[] {
ScrollEventType.SmallDecrement,
ScrollEventType.SmallIncrement,
ScrollEventType.LargeDecrement,
ScrollEventType.LargeIncrement,
ScrollEventType.ThumbPosition,
ScrollEventType.ThumbTrack,
ScrollEventType.First,
ScrollEventType.Last,
ScrollEventType.EndScroll
};
/// <summary>
/// Decode the type of scroll message
/// </summary>
/// <param name="wParam">Lower word of scroll notification</param>
/// <returns></returns>
private ScrollEventType GetEventType( uint wParam )
{
if ( wParam < _events.Length )
return _events[wParam];
else
return ScrollEventType.EndScroll;
}
}
}
关于C# ScrollableControl 不接收所有的滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30776147/
我正在构建基于 ScrollableControl 的自定义用户控件。 现在我正在尝试在我的控件周围添加边框(类似于 DataGridView 的边框) 我可以使用以下方法绘制边框: e.Graphi
我在使用 ScrollableControl(更准确地说是面板)时遇到了问题。当鼠标指针直接在滚动条上滚动时,会正确触发 Scroll 事件。 但是当使用鼠标滚轮滚动时,Panel 会正确滚动但不会触
我有 ScrollableControl 继承者,我想绘制在滚动期间不可滚动的元素(如标题)。 有什么解决办法吗? 最佳答案 看来没有办法了。例如,当控件向上滚动时,通过 ScrollWindow A
我正在构建将用于显示图 block map 的自定义用户控件,我选择 ScrollableControl 作为基类,因为我希望在我的控件中有滚动条。 我已经成功创建了负责仅绘制所需元素的绘制逻辑。 现
我正在创建我自己的非常基本的网格控件。我决定派生自 ScrollableControl(这就是 DataGridView 似乎要做的事情)并从那里开始。 我有很多代码来绘制我的单元格,但我很难弄清楚如
我有一个表单,其中控件动态添加到面板。但是,当它们这样做时,它们会多次添加到折叠下方(容器底部)。很高兴 .NET Framework 提供了这种 ScrollControlIntoView 方法,但
.NET UserControl (从 ScrollableControl 下降)必须能够显示水平和垂直滚动条。 调用者可以设置这些水平和垂直滚动条的可见性和范围: UserControl.AutoS
我是一名优秀的程序员,十分优秀!