c# - Listview后台绘制问题C# Winform

标签 c# winforms listview

我对 Listview 有点问题。

我可以很好地加载 ListView 项目,但是当我设置背景颜色时,它不会将颜色一直绘制到行的左侧 [ListViewItems 加载了 ListViewSubItems 以制作 GridView ,仅第一列显示错误]。有一条窄条不绘制(paint)。如果我有一个行标题,该 strip 的宽度与行标题的宽度大致相同。

如果您对可以做些什么来绘制背景有想法,我很想听听。

现在只是为了尝试一个新想法,我为第一个仍然让我使用这种糟糕的伪 GridView 结构的解决方案提供十票奖励。 [我喜欢遗留代码。]

编辑:

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

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();
    }
}

最佳答案

啊!我现在明白了:

你想要黑客?我向您介绍以下内容:

    ...
    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;
}

要获得更有创意——但也同样老套——的方法,您可以尝试使用 ListView 的背景图像;)

关于c# - Listview后台绘制问题C# Winform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60293/

相关文章:

c# - 如何禁用双击winform按钮?

c# - Winforms - 程序无法从 app.config 找到连接字符串

android - 由于在我的 ListView 中添加联系人图像导致 android ListView 性能下降

performance - 在 Flutter 中使用大量图像(缩略图)提高滚动性能

c# - 如何获得任务并行库使用的最大并行度?

c# - C# 中泛型列表的类型转换

c# - 显示重新抛出的异常的堆栈跟踪,而不是从抛出点开始的堆栈跟踪

c# - 如何在 Unity 中从 sdcard 写入/读取 txt 文件?

c# - 在双显示器设置的同一台显示器上关闭和打开表格

android - fragment 不显示任何内容