Winforms ComboBox高度与ItemHeight不同

时间:2016-05-17 06:35:02

标签: c# winforms combobox

我在Text和DropDown模式下使用ComboBox(默认设置),我想要一个ItemHeight的X(例如40)但是将ComboBox的Height设置为Y (例如20)。

原因是我打算使用ComboBox进行快速搜索功能,其中文本和详细结果中的用户键在列表项中呈现。只需要一行输入。

不幸的是,Winforms会自动将ComboBox的Height锁定到ItemHeight,我无法改变这种情况。

如何让ComboBox的HeightItemHeight不同?

1 个答案:

答案 0 :(得分:1)

首先,您必须将DrawModeNormal更改为OwnerDrawVariable。然后,您必须处理2个事件:DrawItemMeasureItem。他们会是这样的:

    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();
    }