gpt4 book ai didi

C# ScrollableControl 不接收所有的滚动事件

转载 作者:行者123 更新时间:2023-11-30 18:24:50 28 4
gpt4 key购买 nike

我在使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com