即使列表框已禁用,也启用ListBox的ScrollBar?

时间:2013-12-15 10:42:28

标签: c# .net vb.net winforms listbox

我有一个ListBox,其中包含启用了多选的(预定义)项目,以防止出现人为错误我选中了一个复选框来锁定列表框,以便在选中复选框时无法选择任何项目。

好吧,我想要做的是在列表框被禁用时重新启用ListBox垂直滚动条(它是默认控件滚动条),让我看看如果我想看到它们的项目,只需要使用滚动条向上/向下导航列表框。

这可能吗?

这是ListBox,它只有一个垂直滚动条而不是水平:

enter image description here

1 个答案:

答案 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消息。