我有一个ListBox,其中包含启用了多选的(预定义)项目,以防止出现人为错误我选中了一个复选框来锁定列表框,以便在选中复选框时无法选择任何项目。
好吧,我想要做的是在列表框被禁用时重新启用ListBox垂直滚动条(它是默认控件滚动条),让我看看如果我想看到它们的项目,只需要使用滚动条向上/向下导航列表框。
这可能吗?
这是ListBox,它只有一个垂直滚动条而不是水平:
答案 0 :(得分:3)
如果您只是想阻止用户与列表框进行交互,同时仍允许他使用滚动条,那么这应该可以解决问题。我已经制作了一个自定义ListBox,它支持将listBox放入只读模式的一些功能:
public class CustomListBox : ListBox
{
public bool ReadOnly { get; set; }
protected override void WndProc(ref Message m)
{
//WM_LBUTTONDOWN = 0x201
//WM_KEYDOWN = 0x100
if (ReadOnly && (m.Msg == 0x201 || m.Msg == 0x100)) {
Focus();//do this to allow mouse wheeling
return;
}
base.WndProc(ref m);
}
}
用法:您只需将ReadOnly
属性设置为true
:
customListBox1.ReadOnly = true;
请注意,它只会阻止鼠标左键单击以及鼠标左键单击。如果您需要阻止用户执行更多操作,例如阻止鼠标右键,则可以捕获并过滤掉WM_RBUTTONDOWN
消息。