ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c# – 滚动RichTextBox

2019-07-03 14:54:59  阅读:214  来源: 互联网

标签:c scroll winforms richtextbox


我想控制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来调用受保护的方法WndProc来处理消息WM_MOUSEWHEEL,你总是可以使用SendMessage win32函数将WM_MOUSEWHEEL发送到richTextBox1,但它需要在此处导入声明.由你决定.

标签:c,scroll,winforms,richtextbox
来源: https://codeday.me/bug/20190703/1367591.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有