C# 更改禁用组合框和复选框的背景色
我正在设置Windows窗体应用程序,并正在创建窗体的只读版本和同一窗体的另一个版本,以添加/修改信息。在只读版本中,我正在设置表单,以便所有表单组件都是只读的。默认情况下,在Visual Studio 2008中,当禁用表单组件时,该组件的BackColor属性将更改为灰色(淡灰色)。这可以通过设置组件禁用后的BackColor属性来简单地纠正;但是,组合框或复选框的情况并非如此。一旦这些组件被禁用,我就无法修改它们的颜色。是否有人知道在禁用这些部件后如何更改其颜色?我尝试了以下代码,但没有效果C# 更改禁用组合框和复选框的背景色,c#,visual-studio-2008,C#,Visual Studio 2008,我正在设置Windows窗体应用程序,并正在创建窗体的只读版本和同一窗体的另一个版本,以添加/修改信息。在只读版本中,我正在设置表单,以便所有表单组件都是只读的。默认情况下,在Visual Studio 2008中,当禁用表单组件时,该组件的BackColor属性将更改为灰色(淡灰色)。这可以通过设置组件禁用后的BackColor属性来简单地纠正;但是,组合框或复选框的情况并非如此。一旦这些组件被禁用,我就无法修改它们的颜色。是否有人知道在禁用这些部件后如何更改其颜色?我尝试了以下代码,但没有效
comboBoxCategory.Enabled = false;
comboBoxCategory.BackColor = Color.White;
任何帮助都将不胜感激
谢谢。你不能
对于复选框,只需处理OnCheck事件并撤消它
组合框最简单的解决方案是只填充一个项目。如果用户单击,请让其下拉,但不会有任何更改。我不相信您可以使用这些现成的控件来完成此操作。您可能需要扩展组合框并重写OnPaint()方法 您还可以保持组合框处于启用状态,存储所选值(更改为只读模式时),并使用SelectedIndexChanged事件来维护选择
我相信对复选框也需要这样做,但是使用CheckChanged事件在通过代码禁用组合框和复选框后立即更改其背景色
当这些控件被禁用或启用时,它们的事件不会在这些控件上触发我想这就是您要寻找的:
comboBoxCategory.BackColor = System.Drawing.Color.White;
这段代码是我用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事件中,而不是调用过程(如果需要)