更改禁用的组合框BackColor的功能是一个错误还是一个功能
本文关键字:一个 功能 错误 组合 BackColor | 更新日期: 2023-09-27 17:57:38
我找到了以下解决方案:如果我输入设计师:
this.comboBox1.BackColor = System.Drawing.Color.White; //or any other color
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; //it has to be that style
我可以更改comboBox1
的颜色——它不会总是灰色的。
它应该是DropDownList,BackColor也应该放在设计器中。
是bug还是特性?
制作自定义组合框,然后在WndProc
中为禁用的控件设置BackColor
。
public class ComboBoxCustom : ComboBox {
[DllImport("gdi32.dll")]
internal static extern IntPtr CreateSolidBrush(int color);
[DllImport("gdi32.dll")]
internal static extern int SetBkColor(IntPtr hdc, int color);
protected override void WndProc(ref Message m){
base.WndProc(ref m);
IntPtr brush;
switch (m.Msg){
case (int)312:
SetBkColor(m.WParam, ColorTranslator.ToWin32(this.BackColor));
brush = CreateSolidBrush(ColorTranslator.ToWin32(this.BackColor));
m.Result = brush;
break;
default:
break;
}
}
}
DropDownList允许更改BackColor,无需在Designer中设置颜色,只需在属性窗格中将comboBox属性设置为DropDownList。
我也遇到了这个问题,但由于DropDownStyle
属性接收了ComboBoxStyle
枚举来设置样式。
yourCombo.DropDownStyle = ComboBoxStyle.DropDownList;
禁用的控件具有默认BackColor = Color.Grey
。它打算被改变。
编辑:
我相信这只是"最简单的"。是的,当您开始自定义颜色时,必须提供代码来设置控件在所有状态下的属性。这样想吧:。Net假设,如果您要自定义一个属性,您将负责始终设置该属性。
comboBox1
派生自Control
类,公开Control.EnabledChanged
事件。这就是您的逻辑需要实现的地方,以便为启用和禁用状态设置自己的默认值;例如:
private void radioButton1_EnabledChanged(object sender, EventArgs e)
{
if (((ComboBox)sender).Enabled)
{
// set BackColor for enabled state
}
else
{
// set BackColor for disabled state
}
}