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

How to change the color of one cell in ObjectListView?

这不是普通的列表视图! 我想在 C# 中创建一个 Windows 表单应用程序。但是我在使用 ObjectListView 时遇到了一些问题。 我想更改 objectlistview 中一个特定单元格的颜色,但我只能更改一行的颜色。 这是我的对象列表视图: screenshot

在那里你可以看到列 "Queue" 并且有一个值 "Allgemein" 我想在这些列中用 "Allgemein" 为所有这些值涂上红色而不是整行.

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

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

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

CellEditStarting event

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

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

您可以使用它来自定义默认编辑器,或完全替换它。 例如,如果您的 ObjectListView 在单元格中显示颜色,则没有默认编辑器来处理颜色。您可以创建自己的 ColorCellEditor,正确设置它,然后将控件 属性 设置为您的颜色单元格编辑器。然后 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 就会显示出来。

我认为 ObjectListView cookbook.

中很好地解释了您要尝试做的事情

以防万一有人需要这个,如果你想改变整个列的颜色(不是header),使用装饰。

有一个 class TintColumnDecoration,在 OLV 中默认用于对排序的列进行着色,但您可以自定义它:

Dim MyTint= New TintedColumnDecoration(YourColumn)
MyTint.Tint = Color.FromArgb(50, Color.LightGreen)
OLV.AddDecoration(MyTint)