CheckBox disabled - 仅禁用复选框,不禁用标签

CheckBox disabled - disable only check box, not label

我在我的 Winforms 应用程序中使用 CheckBox,如果设置或未设置某些功能,它会向用户显示。如果当前功能为 运行,则 CheckBox 会闪烁(标签会以 1 秒的间隔从黑色变为灰色)。但在某些情况下,我不想让用户设置 on/off 功能 - 在这种情况下,我禁用了 CheckBox。但是这个禁用复选框包括它的标签,如果功能是 运行,标签不会闪烁。

我的问题是我是否可以只禁用复选框 - 而不是它的标签。如果标签没有被禁用,它可以闪烁...

有多种方法可以解决这个问题。按难度递增顺序:

1。 CheckBox.AutoCheck属性

当您想要“禁用”复选框时设置 CheckBox.AutoCheck = false; 将阻止用户切换它,但它仍将显示为已启用。

2。自定义控件

使用带有 CheckBox.Text = "";CheckBox 和单独的 Label 控件来实现您自己的自定义复选框控件。需要时,只需禁用 CheckBox 而不是 Label.

3。覆盖 OnPaint

创建一个派生自 CheckBox 的控件并覆盖 OnPaint 方法。然后你可以用你喜欢的任何颜色绘制标签部分。棘手的部分是获取框的大小和位置以及标签部分,这取决于 OS 版本、主题和辅助功能设置。以下答案探讨了获取此信息的方法:

我。 Get the size of checkbox

二。 How to get size of check and gap in check box?