如何禁用CheckedListBox但启用滚动winforms

时间:2012-03-22 08:55:17

标签: c# winforms

我知道这个问题似乎很容易,但我无法找到解决方案。我的表单中有CheckdListBox。我有里面的复选框列表。如果我这样做:clbxMyControl.Enabled = false;那么我无法滚动查看所有项目。如何允许在禁用的CheckedListBox上滚动?

谢谢!

4 个答案:

答案 0 :(得分:13)

不应禁用控件,而应更改SelectionMode,如下所示:

checkedListBox1.SelectionMode = SelectionMode.None;

用户将无法选择项目,但可以滚动

答案 1 :(得分:3)

您可以阻止用户使用ItemCheck事件检查项目:

    bool listEnabled = true;

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
        if (!listEnabled) e.NewValue = e.CurrentValue;
    }

但要确保检查不再有效:

    private void setListEnabled(bool enabled) {
        listEnabled = enabled;
        if (listEnabled) checkedListBox1.BackColor = Color.FromKnownColor(KnownColor.Window);
        else checkedListBox1.BackColor = Color.FromKnownColor(KnownColor.Control);
    }

答案 2 :(得分:1)

您可以使用此代码使CheckedListBox可滚动。

clbxMyControl.SelectionMode = SelectionMode.None;

因为Enable = false;使控件不可滚动,因为这会使复选框的容器无效。

答案 3 :(得分:1)

ListBox在Windows API中只有一个句柄,设置为启用或禁用。因此,没有本地方式来启用滚动但是项目。

您可能能够构建具有所请求行为的自己的控件,但是您必须从头开始绘制它可能需要大量工作,或者您找到支持该行为的第三方控件。

或者您不能使用enabled属性,但更改背景/字体颜色以使其看起来已禁用并设置:

checkedListBox1.SelectionMode = SelectionMode.None;

另一个替代方案可能是DataGridView。它更强大,我不确定它是否也会禁用滚动条,但如果确实如此,您可以将单元格设为只读并为其着色。