我知道这个问题似乎很容易,但我无法找到解决方案。我的表单中有CheckdListBox。我有里面的复选框列表。如果我这样做:clbxMyControl.Enabled = false;
那么我无法滚动查看所有项目。如何允许在禁用的CheckedListBox上滚动?
谢谢!
答案 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。它更强大,我不确定它是否也会禁用滚动条,但如果确实如此,您可以将单元格设为只读并为其着色。