Combobox外观

Dan*_*ely 6 c# combobox .net-2.0 winforms

我可以更改Winforms ComboBox的外观,以便组合框DropDownStyle = DropDownList看起来更像是一个DropDownStyle = DropDown.它们之间的功能差异在于前者不允许用户输入值,问题是它的默认颜色方案看起来变灰并且与同一对话框上的文本框不匹配.

max*_*max 14

你可以通过自己改变属性和处理项目绘画来获得DropDown外观(谢天谢地,这很容易).示例类,实现这个想法:DropDownListDrawModeDrawMode.OwnerDrawFixed

public class ComboBoxEx : ComboBox
{
    public ComboBoxEx()
    {
        base.DropDownStyle = ComboBoxStyle.DropDownList;
        base.DrawMode = DrawMode.OwnerDrawFixed;
    }

    protected override void OnDrawItem(DrawItemEventArgs e)
    {
        e.DrawBackground();
        if(e.State == DrawItemState.Focus)
            e.DrawFocusRectangle();
        var index = e.Index;
        if(index < 0 || index >= Items.Count) return;
        var item = Items[index];
        string text = (item == null)?"(null)":item.ToString();
        using(var brush = new SolidBrush(e.ForeColor))
        {
            e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
            e.Graphics.DrawString(text, e.Font, brush, e.Bounds);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它是从头开始编写的.实际上,这种行为并不是真正的预期.前段时间我需要实现一个带有自定义项绘画的组合框,并注意到更改`DrawMode`属性也会影响控件样式,强制它为`DropDown`. (3认同)