【问题标题】:How to disable standard context menu of a ListBox scrollbar?如何禁用 ListBox 滚动条的标准上下文菜单?
【发布时间】:2014-05-27 11:30:16
【问题描述】:
我正在使用 Windows 窗体在 C# 中创建一个应用程序。我正在使用 ListBox 来显示一些数据。由于某种原因在这里解释太长了,我想隐藏 ListBox 上滚动条的标准右键菜单(在这里滚动、向上滚动、向下滚动等)
此标准上下文菜单显示在每个控件的每个滚动条上。
有没有办法完全禁用它或用空的上下文菜单替换它?
【问题讨论】:
-
这里解释太长了 - 拜托,我很好奇。本土化?它以用户 Windows 语言给出。在 wpf 中禁用是 easy,在 winforms 中它应该是一些 hacky(捕获 Windows 消息、发送某些东西或调用私有方法)。如果滚动条是一个控件,那么获取它的句柄并设置ContextMenuStrip 属性也可以工作。
标签:
c#
.net
winforms
listbox
scrollbar
【解决方案1】:
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);
}
}