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

Mad*_*her 3 .net c# listbox scrollbar winforms

我正在使用 Windows 窗体在 C# 中创建一个应用程序。我正在使用列表框来显示一些数据。由于某种原因,在这里解释太长,我想隐藏列表框上滚动条的标准右键菜单(滚动到此处,向上滚动,向下滚动等)

此标准上下文菜单显示在每个控件的每个滚动条上。

有没有办法完全禁用它或用空的上下文菜单替换它?

Han*_*ant 5

Winforms 几乎总是使这些类型的调整非常容易实现。您需要对 Windows 的工作原理有最低限度的了解,Petzold 的“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);
    }
}
Run Code Online (Sandbox Code Playgroud)