gpt4 book ai didi

c# - 滚动 RichTextBox

转载 作者:行者123 更新时间:2023-11-30 12:29:09 26 4
gpt4 key购买 nike

我想控制 RichTextBox 滚动,但在控件中找不到任何方法来执行此操作。

这样做的原因是我希望当鼠标光标位于 RichTextBox 控件上时鼠标滚轮滚动有效(它没有事件焦点:鼠标滚轮事件由表单处理).

感谢任何帮助!

最佳答案

使用 win32 有点简单。你在这里:

//must add using System.Reflection
public partial class Form1 : Form, IMessageFilter
{
bool hovered;
MethodInfo wndProc;

public Form1()
{
InitializeComponent();
Application.AddMessageFilter(this);
richTextBox1.MouseEnter += (s, e) => { hovered = true; };
richTextBox1.MouseLeave += (s, e) => { hovered = false; };
wndProc = typeof(Control).GetMethod("WndProc", BindingFlags.NonPublic |
BindingFlags.Instance);
}

public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x20a && hovered) //WM_MOUSEWHEEL = 0x20a
{
Message msg = Message.Create(richTextBox1.Handle, m.Msg, m.WParam, m.LParam);
wndProc.Invoke(richTextBox1, new object[] { msg });
}
return false;
}
}

注意:我使用IMessageFilter应用程序级别 捕获WM_MOUSEWHEEL 消息。我还使用 Reflection 调用 protected 方法 WndProc 来处理消息 WM_MOUSEWHEEL,您始终可以使用 SendMessage win32 函数将 WM_MOUSEWHEEL 发送到 richTextBox1,但它需要在此处导入 声明。这取决于你。

关于c# - 滚动 RichTextBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19422677/

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