如何隐藏滚动条而不禁用它们

时间:2014-09-17 12:33:58

标签: c# .net winforms richtextbox visual-c#-express-2010

有没有办法在没有滚动条可见的情况下滚动RichTextBox?我搜索了Google,但只提出了ScrollBars属性。

我正在使用Microsoft Visual C#Express,winforms。

编辑:
能够解决我的问题的是void,其中包含一些参数,例如RTB,滚动方向以及走多远。

1 个答案:

答案 0 :(得分:2)

要做的一些步骤:

  1. 将RTB放入Panel(Dock:none)
  2. 调用panel.width - = 20;在你的代码中。
  3. 现在我们需要一个没有焦点的鼠标滚轮滚动,使用下面的代码:
  4. 以下是一个小解决方法:

    public Main()
    {
        InitializeComponent();
    
        //Works for panels, richtextboxes, 3rd party etc..
        Application.AddMessageFilter(new ScrollableControls(richTextBox1));
    }
    

    <强> ScrollableControls.cs:

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    //Let controls scroll without Focus();
    
    namespace YOURNAMESPACE
    {
        internal struct ScrollableControls : IMessageFilter
        {
            private const int WmMousewheel = 0x020A;
            private readonly Control[] _controls;
    
            public ScrollableControls(params Control[] controls)
            {
                _controls = controls;
            }
    
            bool IMessageFilter.PreFilterMessage(ref Message m)
            {
                if (m.Msg != WmMousewheel) return false;
                foreach (var item in _controls)
                {
                    ScrollControl(item, ref m);
                }
                return false;
            }
    
            [DllImport("user32.dll")]
            private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
    
            private static void ScrollControl(Control control, ref Message m)
            {
                if (control.RectangleToScreen(control.ClientRectangle).Contains(Cursor.Position) && control.Visible)
                {
                    SendMessage(control.Handle, m.Msg, m.WParam.ToInt32(), m.LParam.ToInt32());
                }
            }
        }
    }
    
    1. 保持时请注意,第三方控件通常使用嵌套容器或类似于radScrollablePanel1.PanelContainer,因此您必须改为调用它们。