WinForm窗体中的ComboBox控件是有TextBox控件和ListBox控件组合而成,其本身是不能自定义高度的只能根据字体的大小而自动生成高度。另外,选中后的选项文本在ComboBox中显示默认是依靠ComboBox的Top边和Left边来定位的而且不能更改。在项目中这样的设定是很不美观的。为了使ComboBox更加美观设计上要求可以自定义控件的高度和选中项文本的垂直居中和水平居中的。
为了实现这种自定义控件高度和选中项文本对齐样式必须要重绘ComboBox的各个选项。通过控制各个选项的坐标来达到选中项文本的对齐样式。
具体实现如下。
1、设置ComboBox的DrawMode属性为OwnerDrawVariable或者OwnerDrawFixed。
2、设置ItemHeight属性的值为目标ComboBox高度减去6即ComboBox的高度=ItemHeight+6。
3、可以根据设计要求设置其他的属性,比如DropDownHeight、Size、Cursor、FlatStyle、Font、ForeColor等。
4、核心实现。通过ComboBox的DrawItem事件来绘制各个选项。具体代码如下。
private void ComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
ComboBox cmb = sender as ComboBox; //当前的ComboBox控件
SolidBrush myBrush = new SolidBrush(cmb.ForeColor); //字体颜色
Font ft = cmb.Font; //获取在属性中设置的字体
//选项的文本
string itemText = cmb.GetItemText(cmb.Items[e.Index]);//cmb.I