我在Text和DropDown模式下使用ComboBox(默认设置),我想要一个ItemHeight
的X(例如40)但是将ComboBox的Height
设置为Y (例如20)。
原因是我打算使用ComboBox进行快速搜索功能,其中文本和详细结果中的用户键在列表项中呈现。只需要一行输入。
不幸的是,Winforms会自动将ComboBox的Height
锁定到ItemHeight
,我无法改变这种情况。
如何让ComboBox的Height
与ItemHeight
不同?
答案 0 :(得分:1)
首先,您必须将DrawMode
从Normal
更改为OwnerDrawVariable
。然后,您必须处理2个事件:DrawItem
和MeasureItem
。他们会是这样的:
private void comboBox1_MeasureItem(object sender, MeasureItemEventArgs e)
{
e.ItemHeight = 40; //Change this to your desired item height
}
private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
ComboBox box = sender as ComboBox;
if (Object.ReferenceEquals(null, box))
return;
e.DrawBackground();
if (e.Index >= 0)
{
Graphics g = e.Graphics;
using (Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
? new SolidBrush(SystemColors.Highlight)
: new SolidBrush(e.BackColor))
{
using (Brush textBrush = new SolidBrush(e.ForeColor))
{
g.FillRectangle(brush, e.Bounds);
g.DrawString(box.Items[e.Index].ToString(),
e.Font,
textBrush,
e.Bounds,
StringFormat.GenericDefault);
}
}
}
e.DrawFocusRectangle();
}