如何禁用ListBox滚动条的标准上下文菜单?

3
我正在使用Windows Forms和C#创建一个应用程序。我使用ListBox来显示一些数据。由于某种原因(这里太长不方便解释),我想隐藏ListBox上滚动条的标准右键菜单(如“滚动到此处”,“向上滚动”,“向下滚动”等)。
这个标准的上下文菜单会在每个控件的每个滚动条上显示。
有没有办法完全禁用它或者将其替换为空白的上下文菜单?

2
“which is too long to explain here” - 请原谅,这个问题太长了,无法在此解释。本地化?它是根据用户窗口语言设置的。在WPF中禁用滚动条很容易,在WinForms中可能需要一些hacky的方法(捕获Windows消息,发送某些内容或调用私有方法)。如果滚动条是一个控件,则获取其句柄并设置ContextMenuStrip属性也可能有效。 - Sinatr
1个回答

5
Winforms几乎总是使这些微调非常容易实现。 您需要对Windows的工作原理有最基本的了解,Petzold的“Programming Windows”前几章可以让您走得更远。 并且利用Visual Studio附带的Spy ++实用程序,它会向窗口发送Windows发送的消息。
当您右键单击滚动条时,您将看到它发送WM_CONTEXTMENU消息,这是触发上下文菜单的消息。 您需要做的就是确保本机ListBox控件无法看到该消息。 这只是一个一行代码。 将新类添加到项目中并复制/粘贴下面显示的代码。 编译。并从工具箱的顶部拖动新控件到您的窗体上,替换旧的列表框。 Presto-chango,没有上下文菜单了。
using System;
using System.Windows.Forms;

class MyListBox : ListBox {
    protected override void WndProc(ref Message m) {
        // Intercept WM_CONTEXTMENU
        if (m.Msg != 0x7b) base.WndProc(ref m);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接