【发布时间】:2011-08-23 02:20:38
【问题描述】:
我想知道您如何在 c# 中使 CheckBox 不可选择?我以为它会是 SetSelectable (false) 之类的东西,但我似乎看不到该方法。
我找到了CanSelect,但这似乎是一个只读属性。
【问题讨论】:
我想知道您如何在 c# 中使 CheckBox 不可选择?我以为它会是 SetSelectable (false) 之类的东西,但我似乎看不到该方法。
我找到了CanSelect,但这似乎是一个只读属性。
【问题讨论】:
您可以将AutoCheck 属性设置为false。
【讨论】:
Enable = False 如果经常不是一个好的解决方案,它确实使复选框难以阅读。禁用对于只读模式是没有用的,因为它不允许物理读取文本!
您可以将Enabled 属性设置为false:
checkBox1.Enabled = false;
【讨论】:
您可以使用以下代码创建一个
public class ReadOnlyCheckBox : System.Windows.Forms.CheckBox
{
private bool readOnly;
protected override void OnClick(EventArgs e)
{
// pass the event up only if its not readlonly
if (!ReadOnly) base.OnClick(e);
}
public bool ReadOnly
{
get { return readOnly; }
set { readOnly = value; }
}
}
或者您也可以处理选中的更改事件并始终将其设置回您想要的值
【讨论】:
为了做出更多的只读行为:
CheckBox 上时禁用突出显示
我们可以继承CheckBox类(类似于Haris Hasan's answer但有一些改进):
public class ReadOnlyCheckBox : CheckBox
{
[System.ComponentModel.Category("Behavior")]
[System.ComponentModel.DefaultValue(false)]
public bool ReadOnly { get; set; } = false;
protected override void OnMouseEnter(EventArgs e)
{
// Disable highlight when the cursor is over the CheckBox
if (!ReadOnly) base.OnMouseEnter(e);
}
protected override void OnMouseDown(MouseEventArgs e)
{
// Disable reacting (logically or visibly) to a mouse click
if (!ReadOnly) base.OnMouseDown(e);
}
protected override void OnKeyDown(KeyEventArgs e)
{
// Suppress space key to disable checking/unchecking
if (!ReadOnly || e.KeyData != Keys.Space) base.OnKeyDown(e);
}
}
【讨论】:
您可以将Enabled 属性设置为false
【讨论】:
UWP 中不存在 AutoCheck,但我认为您可以使用 IsTapEnabled = false。
【讨论】:
针对一些关于灰色标签的cmets:将CheckBox的Text设置为空字符串,Enabletofalse并使用Label作为文本。
缺点:没有现成的助记符支持。
【讨论】:
利用一个简单的Label,使用这样的字形作为其Text:✔ checkBox1。
【讨论】:
这段代码对我有用:
public class CtrlCheckBoxReadOnly : System.Windows.Forms.CheckBox
{
[Category("Appearance")]
[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
public bool ReadOnly { get; set; }
protected override void OnClick(EventArgs e)
{
if (!ReadOnly) base.OnClick(e);
}
}
【讨论】:
用于禁用 CheckedListBox 中的所有复选框
for (int i = 0; i < checkedListBoxChecks.Items.Count; i++)
{
checkedListBoxChecks.SetItemChecked(i, true);
//checkedListBoxChecks.Enabled = false;
this.checkedListBoxChecks.SetItemCheckState(i, CheckState.Indeterminate);
}
private void checkedListBoxChecks_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.CurrentValue == CheckState.Indeterminate)
{
e.NewValue = e.CurrentValue;
}
}
【讨论】: