65.9K
CodeProject 正在变化。 阅读更多。
Home

外观可定制的 ComboBox

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.50/5 (5投票s)

2007年3月28日

2分钟阅读

viewsIcon

93182

downloadIcon

7183

一个实现 .Net ComboBox 控件的类,允许自定义外观。

Screenshot - demo.gif

引言

该类继承自 .NET ComboBox 类。它提供了颜色和样式自定义功能,以改变 ComboBox 边框和下拉按钮的外观。可以为 GotFocusLostFocus 状态分别自定义一组属性。这些属性可以从设计器内部进行自定义。

.NET 2.0 Framework 提供的原始 ComboBox 控件在自定义外观方面非常有限。许多人选择自己创建自定义 ComboBox,而不是从 .NET Framework 的 ComboBox 继承。这可能是因为 .NET ComboBoxOnPaint 函数无法访问 ComboBox 的文本框区域。您可以通过在构造函数中使用以下语句来允许重写 OnPaint 函数:

public CustomComboBox() : base()
{
    SetStyle(ControlStyles.UserPaint, true);
}

重绘 ComboBox 控件的另一种方法是重写 WndProc 函数。但是,这种方法对于 C#、.NET 或 Win32 编程的初学者来说可能非常复杂,尤其是在他们想要持续选择合适的颜色和样式以匹配应用程序的设计时。

背景

该项目是基于 Fadrian Sudaman 贡献的现有项目 **“使标准 ComboBox 看起来扁平化”** 扩展而来。我对 Fadrian Sudaman 使用 WndProc 在 .NET ComboBox 控件上绘制所做的工作印象深刻。

使用代码

该类继承自 .NET ComboBox

不要使用

ComboBox cboDemo = new ComboBox();

您可以改用

ComboBox cboDemo = new CustomComboBox();
// or
CustomComboBox cboDemo = new CustomComboBox();

要使用此类,读者需要了解 .NET ComboBox 的标准函数、属性和事件,以及此继承类中创建的一些新属性。

Sample Image - maximum width is 600 pixels

关注点

我花费了大量时间来修复此继承控件的闪烁问题。我删除了许多不必要的代码,并简化了重写的 WndProc 函数。我还更改了几个“OnEvent”函数,并将 Invalidate() 移动到 base.OnEvent(e) 之前。

它仍然会闪烁,尤其是在我将视频加速设置为“无”时。但是,我相信这应该将闪烁程度降至可接受的水平。
© . All rights reserved.