Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改ObjectListView中一个单元格的颜色?_C#_Listview_Colors_Cell_Objectlistview - Fatal编程技术网

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

C# 如何更改ObjectListView中一个单元格的颜色?,c#,listview,colors,cell,objectlistview,C#,Listview,Colors,Cell,Objectlistview,这不是一个简单的列表视图! 我想用C#创建一个Windows窗体应用程序。但是我对ObjectListView有一些问题。 我想更改objectlistview中一个特定单元格的颜色,但只能更改一行的颜色。 这是我的objectlistview: 在那里你可以看到列“Queue”,有一个值“Allgemein”,我想在这些列中用“Allgemein”将所有这些值涂成红色,但不是整行 我使用此代码更改了行的颜色: objectListView1.Items[0].BackColor = Colo

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

在那里你可以看到列“Queue”,有一个值“Allgemein”,我想在这些列中用“Allgemein”将所有这些值涂成红色,但不是整行

我使用此代码更改了行的颜色:

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

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

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

您可以使用此选项自定义默认编辑器,或完全替换它。 例如,如果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;
    }
}
您的处理程序方法可能如下所示:

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中编辑颜色时,都会显示spiffy ColorCellEditor。

我认为这篇文章很好地解释了您要做的事情。

如果有人需要,如果您想更改整个列(而不是标题)的颜色,请使用装饰

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

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

dude的可能副本是一个普通的listview而不是ObjectListView对不起,你是对的!但这不仅仅是当用户试图编辑单元格时发生的吗?因为我想在程序打开并将对象加载到objectlstview时为单元格着色@Cortana当您要更改颜色时,为什么不显式地调用此处理程序?好的,谢谢,这非常有帮助。但是现在我需要先点击这个栏来查看颜色。你知道为什么吗?或者我可以将该函数绑定到表单加载事件或按钮单击吗?根据需要,您需要调用一些方法来应用后期处理(
RefreshObjects()
)。可能有兴趣:为了提高性能,只有当FormatRow事件的处理程序将UseCellFormatEvents设置为true时,才会触发FormatCell事件。如果要为每个单元格激发FormatCell事件,可以在ObjectListView本身上设置UseCellFormatEvents。“-因此,在设置ObjectListView的
UseCellFormatEvents
时,它应该可以正常工作。