组合框中未显示绘制的线条

时间:2012-08-08 10:09:14

标签: c# winforms combobox system.drawing

我在下面的问题中需要你的帮助(使用.Net 3.5和Windows Forms):

我只是想在一个位于表单上的组合框(Windows窗体)的中间画一条线。 我使用的代码是:

void comboBox1_Paint(object sender, PaintEventArgs e)
{
  e.Graphics.DrawLine(new Pen(Brushes.DarkBlue),
                      this.comboBox1.Location.X,
                      this.comboBox1.Location.Y + (this.comboBox1.Size.Height / 2),
                      this.comboBox1.Location.X + this.comboBox1.Size.Width,
                      this.comboBox1.Location.Y + (this.comboBox1.Size.Height / 2));
}

发射油漆事件:

private void button1_Click(object sender, EventArgs e)
{
  comboBox1.Refresh();
}

当我执行代码并按下按钮时,不会绘制线条。在调试中,未处理绘制处理程序中的断点。奇怪的是,MSDN在ComBox的事件列表中有一个绘制事件,但在VS 2010中,IntelliSense在ComboBox的成员中找不到这样的事件

感谢。

2 个答案:

答案 0 :(得分:2)

public Form1() 
{
  InitializeComponent();
  comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
  comboBox1.DrawItem += new DrawItemEventHandler(comboBox1_DrawItem);
}

void comboBox1_DrawItem(object sender, DrawItemEventArgs e) {
  e.DrawBackground();
  e.Graphics.DrawLine(Pens.Black, new Point(e.Bounds.Left, e.Bounds.Bottom-1),
    new Point(e.Bounds.Right, e.Bounds.Bottom-1));
  TextRenderer.DrawText(e.Graphics, comboBox1.Items[e.Index].ToString(), 
    comboBox1.Font, e.Bounds, comboBox1.ForeColor, TextFormatFlags.Left);
  e.DrawFocusRectangle();
}

答案 1 :(得分:1)

Paint事件不会触发。
只有在DropDownStyle == ComboBoxStyle.DropDownList

时才能实现您的目标
        comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
        comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
        comboBox1.DrawItem += (sender, args) => 
        {
            var ordinate = args.Bounds.Top + args.Bounds.Height / 2;
            args.Graphics.DrawLine(new Pen(Color.Red), new Point(args.Bounds.Left, ordinate),
                new Point(args.Bounds.Right, ordinate));
        };

这样您就可以自己绘制所选的项目区域。