波斯马BOSSMA Information Technology

WinForm中ComboBox的DrawItem事件的应用

发布时间:2008年11月24日 / 分类:ASP.NET / 17,470 次浏览 / 评论

今天在CSDN的论坛看到一个问题,大致是这么个意思:
当鼠标滑过ComboBox的列表项时,怎么才能获取当前鼠标滑过列表项?

在网上找了找,没现成的,但是看到有人在VC里边用OnDrawItem来实现,就用了这个思路。
首先将将DrawMode属性设置为OwnerDrawFixed
然后绑定DrawItem事件,具体方法如下:

private void moveComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
            //经测试,鼠标划过时,e.State 为 DrawItemState.Selected
            if (e.State == DrawItemState.Selected)
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.Beige), new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
                //显示鼠标滑过项目的文本
                label1.Text = moveComboBox1.Items[e.Index].ToString();
            }
            else if (e.State == DrawItemState.None)
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.White), new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
            }

            e.Graphics.DrawString(moveComboBox1.Items[e.Index].ToString(), moveComboBox1.Font, new SolidBrush(Color.Black), 2, e.Bounds.Y + 2);
}

代码比较容易懂,先画背景,然后画文字。
由此,上边的问题就可以解决了。
我们还可以在这里做其它的一些个性化操作,发挥想象吧。
比如修改选中的背景颜色等等,这里我们使用了Color.Beige作为背景颜色。

此篇文章做个记录。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《WinForm中ComboBox的DrawItem事件的应用

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论