所有者使用颜色选择器绘制组合框

本文关键字:绘制 组合 选择器 颜色 所有者 | 更新日期: 2023-09-27 18:25:43

我有一个用户控件,代码如下:

public partial class ColorComboBox : ComboBox
{
    public ColorComboBox()
    {
        InitializeComponent();
        this.DropDownStyle = ComboBoxStyle.DropDownList;
        this.DrawMode = DrawMode.OwnerDrawFixed;
        string[] colorNames = System.Enum.GetNames( typeof( KnownColor ) );
        this.Items.AddRange( colorNames );
    }
    protected override void OnDrawItem( DrawItemEventArgs e )
    {
        if ( e.Index < 0 ) return;
        this.SuspendLayout();
        string s = (string)this.Items[ e.Index ];
        using ( Brush b = new SolidBrush( Color.FromName( s ) ) )
        {
            e.Graphics.DrawRectangle( Pens.Black, 2, e.Bounds.Top + 1, 20, 11 );
            e.Graphics.FillRectangle( b, 3, e.Bounds.Top + 2, 19, 10 );
            e.Graphics.DrawString( s, this.Font, Brushes.Black, 25, e.Bounds.Top );
        }
        e.DrawFocusRectangle();
        this.ResumeLayout();
    }
}

在将这个ComboBox的一个实例添加到表单后,我遇到了一个奇怪的问题;鼠标指针下的每个项目都将条目更改为粗体。

有人知道为什么会发生这种事吗?

谢谢。

所有者使用颜色选择器绘制组合框

我已经设法通过添加以下行来解决这个问题:

e.DrawBackground();

感谢它运行良好

使用它:

    label1.Text = colorComboBox1.SelectedItem.ToString();
    label1.BackColor  = Color.FromName(colorComboBox1.SelectedItem.ToString());

    string s = (string)colorComboBox1.Items[colorComboBox1.SelectedIndex];
    label1.Text = s; 
    label1.BackColor  = Color.FromName(s);