0

我正在设置一个 Windows 窗体应用程序,我正在创建一个只读版本的表单和另一个版本的相同表单,用于添加/修改信息。在只读版本中,我正在设置表单,以便所有表单组件都是只读的。默认情况下,在 Visual Studio 2008 中,禁用表单组件时,该组件的 BackColor 属性将更改为灰色(ish)颜色。这可以通过在组件被禁用后设置组件的 BackColor 属性来简单地纠正;但是,对于 ComboBox 或 CheckBox,情况并非如此。一旦这些组件被禁用,我就无法修改它们的颜色。有谁知道在这些组件被禁用后如何更改它们的颜色?我尝试了以下代码,但无济于事。

comboBoxCategory.Enabled = false;
comboBoxCategory.BackColor = Color.White;

任何帮助将非常感激。

谢谢。

4

5 回答 5

0

我想这就是你要找的:

    comboBoxCategory.BackColor = System.Drawing.Color.White;
于 2012-07-19T05:30:18.847 回答
0

在通过代码禁用它们后立即更改组合框和复选框的背景颜色

它们不是在这些控件被禁用或启用时触发的事件

于 2012-07-13T15:19:23.327 回答
0

你不能。

对于复选框,只需处理 OnCheck 事件并撤消它。

组合框最简单的解决方案是仅填充一项。如果用户单击,则让用户下拉,但不会有任何更改。

于 2012-07-13T15:15:07.727 回答
0

我不相信你可以用这些开箱即用的控件来做到这一点。您可能必须扩展组合框并覆盖 OnPaint() 方法。

您还可以启用组合框,存储选定的值(当更改为只读模式时)并使用 SelectedIndexChanged 事件来维护选择。

我相信复选框也需要做同样的事情,但使用 CheckChanged 事件

于 2012-07-13T15:15:09.110 回答
0

我在 VB 中制作的这段代码可以帮助您解决问题。将此代码放入您的表单中,将 comboBox1 更改为您的控件名称,将颜色更改为您喜欢的任何颜色 .BackColor = Color.White

Dim lbl_Box As Label
Private Sub Disable_control()

    If ComboBox1.Enabled = True Then
        lbl_Box = New Label
        With lbl_Box
            .Name = "lbl_Box"
            .BackColor = Color.White
            .Top = ComboBox1.Top + 1
            .Left = ComboBox1.Left
            .Width = ComboBox1.Width - 21
            .Text = ComboBox1.Text
            .Font = ComboBox1.Font
            .Padding = New Padding(0, 2, 0, 0)
        End With
        Me.Controls.Add(lbl_Box)
        ComboBox1.Enabled = False
        lbl_Box.BringToFront()
    Else
        lbl_Box.Dispose()
        Me.Controls.Remove(lbl_Box)
        ComboBox1.Enabled = True
    End If
End Sub

您可以将带有一些更改的代码放入ComboBox1_EnabledChanged事件中,而不是根据需要调用该过程。

于 2020-09-19T20:22:12.120 回答