如何在Winforms中向列表框添加矩形

时间:2013-10-20 10:58:31

标签: winforms user-interface

我想将UI元素添加到Winforms中的ListBox。 当我添加一个Elipse或一个Rectangle时 - 我在列表中得到的是Object.ToString()。 当我将UI元素插入ListBox.Items时,我如何获得WPF的行为 - 我将看到我插入的对象而不是它的字符串表示?

1 个答案:

答案 0 :(得分:1)

一个起点是声明一个适合做绘制形状所需的界面。您的具体Shape类应该实现该接口:

    public interface IShape {
        Rectangle Measure();
        void Draw(Graphics g);
        // etc...
    }

您应该将ListBox的DrawMode属性设置为DrawMode.OwnerDrawVariable。这要求您实现其MeasureItem事件处理程序,需要确定列表框项目显示形状的大小:

    void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) {
        e.ItemWidth = listBox1.ClientSize.Width;
        var shape = listBox1.Items[e.Index] as IShape;
        if (shape != null) e.ItemHeight = shape.Measure().Height;
    }

您需要为DrawItem事件实现一个事件处理程序来绘制形状:

    void listBox1_DrawItem(object sender, DrawItemEventArgs e) {
        e.DrawBackground();
        var shape = listBox1.Items[e.Index] as IShape;
        if (shape != null) shape.Draw(e.Graphics);
        e.DrawFocusRectangle();
    }