当前位置:  开发笔记 > 编程语言 > 正文

Listview背景绘图问题C#Winform

如何解决《Listview背景绘图问题C#Winform》经验,为你挑选了1个好方法。

我对Listview有一点问题.

我可以用listview项加载它,但是当我设置背景颜色时它不会一直绘制到行的左侧[listViewItems加载ListViewSubItems来制作网格视图,只有第一列显示错误].有一条窄条不涂漆.如果我有一个行标题,那个条带的宽度与行标题大致相同.

如果你想到可以做些什么来制作背景画,我很乐意听到它.

现在只是为了尝试一个新的想法,我为第一个解决方案提供十票奖励,这仍然让我使用这个糟糕的伪网格视图的可怕构造.[我喜欢遗留代码.]

编辑:

这是一个展示问题的示例.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ListView lv = new ListView();

        lv.Dock = System.Windows.Forms.DockStyle.Fill;
        lv.FullRowSelect = true;
        lv.GridLines = true;
        lv.HideSelection = false;
        lv.Location = new System.Drawing.Point(0, 0);
        lv.TabIndex = 0;
        lv.View = System.Windows.Forms.View.Details;
        lv.AllowColumnReorder = true;

        this.Controls.Add(lv);

        lv.MultiSelect = true;

        ColumnHeader ch = new ColumnHeader();
        ch.Name = "Foo";
        ch.Text = "Foo";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch);

        ColumnHeader ch2 = new ColumnHeader();
        ch.Name = "Bar";
        ch.Text = "Bar";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch2);

        lv.BeginUpdate();

        for (int i = 0; i < 3; i++)
        {


            ListViewItem lvi = new ListViewItem("1", "2");

            lvi.BackColor = Color.Black;
            lvi.ForeColor = Color.White;

            lv.Items.Add(lvi);
        }
        lv.EndUpdate();
    }
}

moobaa.. 5

啊! 我现在明白了 :}

你想要hacky?我告诉你以下内容:

    ...
    lv.OwnerDraw = true;
    lv.DrawItem += new DrawListViewItemEventHandler( lv_DrawItem );
    ...

void lv_DrawItem( object sender, DrawListViewItemEventArgs e )
{
    Rectangle foo = e.Bounds;
    foo.Offset( -10, 0 );
    e.Graphics.FillRectangle( new SolidBrush( e.Item.BackColor ), foo );
    e.DrawDefault = true;
}

对于更具创造性 - 而且不少于hacky - 的方法,您可以尝试使用ListView的背景图像;)



1> moobaa..:

啊! 我现在明白了 :}

你想要hacky?我告诉你以下内容:

    ...
    lv.OwnerDraw = true;
    lv.DrawItem += new DrawListViewItemEventHandler( lv_DrawItem );
    ...

void lv_DrawItem( object sender, DrawListViewItemEventArgs e )
{
    Rectangle foo = e.Bounds;
    foo.Offset( -10, 0 );
    e.Graphics.FillRectangle( new SolidBrush( e.Item.BackColor ), foo );
    e.DrawDefault = true;
}

对于更具创造性 - 而且不少于hacky - 的方法,您可以尝试使用ListView的背景图像;)

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有