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

时间:2014-05-27 11:30:16

标签: c# .net winforms listbox scrollbar

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

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

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

1 个答案:

答案 0 :(得分:3)

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);
    }
}