C# RichTextBox&;禁用鼠标滚动
我想使用鼠标中键清除RichTextBox,但它也会激活鼠标滚动功能,类似于您在web浏览器中找到的功能。当垂直滚动条可见(有足够的数据)并且您按下鼠标中键时,会出现滚动光标,您可以通过向上或向下移动光标来向上或向下滚动。如何禁用鼠标滚动C# RichTextBox&;禁用鼠标滚动,c#,scroll,mouse,richtextbox,C#,Scroll,Mouse,Richtextbox,我想使用鼠标中键清除RichTextBox,但它也会激活鼠标滚动功能,类似于您在web浏览器中找到的功能。当垂直滚动条可见(有足够的数据)并且您按下鼠标中键时,会出现滚动光标,您可以通过向上或向下移动光标来向上或向下滚动。如何禁用鼠标滚动 鼠标滚动似乎是Windows(或鼠标驱动程序)的一项功能,因此如何阻止鼠标向下事件(如果按下鼠标中键)到达负责鼠标滚动的任何例程?无需滚动RichTextBox,只需从RichTextBox继承即可 public class NoScrollRichTextB
鼠标滚动似乎是Windows(或鼠标驱动程序)的一项功能,因此如何阻止鼠标向下事件(如果按下鼠标中键)到达负责鼠标滚动的任何例程?无需滚动RichTextBox,只需从RichTextBox继承即可
public class NoScrollRichTextBox : RichTextBox
{
const int WM_MOUSEWHEEL = 0x020A;
protected override void WndProc(ref Message m)
{
// This will completely ignore the mouse wheel, which will disable zooming as well
if (m.Msg != WM_MOUSEWHEEL)
base.WndProc(ref m);
}
}
检查0x207和0x208,中间按钮向下和向上:
using System;
using System.Windows.Forms;
class MyRtb : RichTextBox {
protected override void WndProc(ref Message m) {
if (m.Msg == 0x207) this.Clear();
else if (m.Msg != 0x208) base.WndProc(ref m);
}
}
我明白了,但我不想禁用“鼠标滚轮滚动”,我想禁用“鼠标移动滚动”。你见过如何在点击鼠标滚轮后移动鼠标在网页中向各个方向滚动吗?我也不想禁用鼠标滚轮点击,因为我想用它在不激活“鼠标移动滚动”光标的情况下清除richtextbox的内容。代码需要一点更正。如您所述,消息是0x207和0x208,但代码使用0x208和0x209。调试应用程序时,我看到此方法的迭代次数过多。它看起来不是一个有效的解决方案,尤其是当RichTextBox用于显示来自串行端口的数据时,它似乎可以处理与RichTextBox相关的所有消息。哦,上帝。它所花费的3纳秒是可以测量地将事情拖下来的吗?在C#中,是否有可能在方法对MouseDown/Up事件进行操作后停止它,因为这就是所有问题,事件被执行,但其他例程也被激活。建议让事件顺其自然,但这只是一个RichTextBox,必须有一种方法来永久处理它,就像e.hanlded用于按键。代码就是这样做的,它确保本机Windows控件看不到消息。我完全不明白你为什么认为这有问题。