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

4

这不是一个普通的列表视图!我想要创建一个使用C#编写的Windows窗体应用程序。但是,我在使用ObjectListView时遇到了一些问题。

我想要改变ObjectListView中特定单元格的颜色,但是我只能改变整个行的颜色。

这是我的ObjectListView:

截图

你可以看到列“Queue”中有一个值“Allgemein”,我想将这一列中所有这个值为“Allgemein”的单元格标记成红色,而不是整行改变颜色。

我用以下代码改变了整个行的颜色:

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

可能是如何在Winforms ListView中单独设置BackColor?的重复问题。 - Joel Bourbonnais
老兄,那是一个普通的ListView而不是ObjectListView。 - Cortana
对不起,你是正确的! - Joel Bourbonnais
3个回答

2

好的,谢谢你,这非常有帮助。但是现在我需要先点击列才能看到颜色。你知道为什么吗?或者我可以将该功能绑定到表单加载事件或按钮单击事件吗? - Cortana
根据这里所述,您需要调用某些方法来应用后处理(RefreshObjects())。 - Joel Bourbonnais
1
或许你会感兴趣:"为了提高性能,只有在FormatRow事件的处理程序将UseCellFormatEvents设置为true时,才会触发FormatCell事件。如果您想要为每个单元格触发FormatCell事件,可以在ObjectListView本身上设置UseCellFormatEvents。" - 因此,当您设置ObjectListView的UseCellFormatEvents时,它应该可以正常工作,没有问题。 - Rev

2

万一有人需要,如果您想改变整个列(不是标题)的颜色,请使用修饰。

在OLV中默认使用一个名为TintColumnDecoration的类来着色排序列,但您可以自定义它:

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

0

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

CellEditStarting 事件

在用户请求编辑单元格但单元格编辑器放置在屏幕上之前,将触发 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 就会显示出来。

但这不仅仅是当用户尝试编辑单元格时才会发生吗?因为我想在程序打开并将对象加载到对象列表视图时就着色单元格! - Cortana
@Cortana 为什么不在要改变颜色时显式地调用这个处理程序呢? - CodingDefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接