如何在ObjectListView中更改一个单元格的颜色?

时间:2015-09-24 11:18:16

标签: c# listview colors cell objectlistview

这不是普通的LISTVIEW! 我想用C#创建一个Windows窗体应用程序。但是我对ObjectListView有一些问题。 我想在objectlistview中更改一个特定单元格的颜色,但我只能更改一行的颜色。 这是我的objectlistview: screenshot

在那里你可以看到“Queue”列,并且有一个值“Allgemein”,我想用这些列中的“Allgemein”为所有这些值着色为红色,但不是整行。

我用这段代码改变了行的颜色:

objectListView1.Items[0].BackColor = Color.Red;

3 个答案:

答案 0 :(得分:2)

我认为你要做的事情在ObjectListView cookbook中得到了很好的解释。

答案 1 :(得分:1)

如果有人需要这个,如果你想改变整个列的颜色(不是标题),请使用装饰。

有一个类array_column(),默认情况下在OLV中用于对排序列进行着色,但您可以对其进行自定义:

TintColumnDecoration

答案 2 :(得分:0)

来自http://objectlistview.sourceforge.net/

CellEditStarting event

在用户请求编辑单元格之后但在单元格编辑器放置在屏幕上之前触发CellEditStarting事件。

此事件将 CellEditEventArgs 对象传递给事件处理程序。在此事件的处理程序中,如果将e.Cancel设置为True,则不会开始单元格编辑操作。如果不取消编辑操作,几乎肯定会想要使用CellEditEventArgs的Control属性。

您可以使用它来自定义默认编辑器,或完全替换它。 例如,如果您的ObjectListView在单元格中显示颜色,则没有默认编辑器来处理颜色。您可以创建自己的ColorCellEditor,正确设置它,然后将Control属性设置为您的颜色单元格编辑器。然后ObjectListView将使用该控件而不是默认控件。如果执行此操作,则必须完全配置控件,因为ObjectListView不会对编辑器进行任何进一步配置。所以,要听取这个事件,你会做这样的事情:

this.myObjectListView.CellEditStarting += new CellEditEventHandler(this.HandleCellEditStarting);

您的处理程序方法可能如下所示:

private void HandleCellEditStarting(object sender, CellEditEventArgs e) {
    if (e.Value is Color) {
        ColorCellEditor cce = new ColorCellEditor();
        cce.Bounds = e.CellBounds;
        cce.Value = e.Value;
        e.Control = cce;
    }
}

使用此代码,只要用户尝试编辑ObjectListView中的颜色,就会显示漂亮的ColorCellEditor。