【问题标题】:How to change the color of one cell in ObjectListView?如何更改 ObjectListView 中一个单元格的颜色?
【发布时间】:2015-12-21 23:26:22
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c# listview colors cell objectlistview


【解决方案1】:

我认为ObjectListView cookbook 很好地解释了你想要做的事情。

【讨论】:

  • 好的,谢谢,这很有帮助。但现在我需要先单击该列才能查看颜色。你知道为什么吗?或者我可以将该函数绑定到表单加载事件或按钮单击吗?
  • 根据this,你需要调用一些方法来应用后处理(RefreshObjects())。
  • 可能感兴趣:“为了提高性能,仅当 FormatRow 事件的处理程序将 UseCellFormatEvents 设置为 true 时才会触发 FormatCell 事件。如果您希望为每个单元格触发 FormatCell 事件,您可以设置在 ObjectListView 本身上使用 CellFormatEvents。” - 因此,当您设置 ObjectListView 的UseCellFormatEvents 时,它应该可以正常工作。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    来自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。

    【讨论】:

    • 但这不仅是在用户尝试编辑单元格时吗?因为我想在程序打开并将对象加载到 objectlstview 时为单元格着色?!
    • @Cortana 为什么在要更改颜色时不显式调用此处理程序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    • 2014-08-24
    • 2020-12-09
    相关资源
    最近更新 更多