2017-03-02 115 views
0

我已经设置了RenderDelegate以不同颜色绘制单元格文本。我还将OwnerDraw属性设置为trueRenderDelegate未被调用

这是渲染代码:

this.olvInvoiceType.RendererDelegate = delegate (EventArgs re, Graphics g, Rectangle r, object rowObject) 
{ 
    var item= rowObject as MyItem; 
    var brush = Brushes.Red; 

    g.DrawString(item.Name, olvItems.Font, brush, r); 
    return false; 
}; 

然而,正在显示什么。

我错过了什么?

+0

@IvanKishchenko Winforms。 'olvInvoiceType'是标准的'OLVColumn' –

回答

0

尽管在ObjectListView网站上的例子说,你似乎真的必须返回true,而不是false。

其他例子我发现也返回true。

另外,不要忘记在渲染前检查你的对象是否为null,否则会抛出异常!

this.olvInvoiceType.RendererDelegate = delegate (EventArgs re, Graphics g, Rectangle r, object rowObject) 
      { 
       var item = rowObject as MyItem; 
       if (item != null) 
       { 
        //g.FillRectangle(new SolidBrush(this.olvItems.BackColor), r); 
        g.DrawString(item.Name, olvItems.Font, brush, r); 
       } 
       return true; 
      }; 

当我想这个我好像有奇怪的问题,该文被控制在黑色渲染两次,一次原本然后在红色另一次由我!
这可能是一个错误,或者我可能错过了一些东西。

为了解决这个问题,我不得不绘制背景将fillrideangele,但如果在选定的行,那么你有问题,所以你需要分开处理。

我还发现OwnerDraw没有区别!

+0

你的文本被绘制两次是因为当你返回false时返回true。 –

+0

但是,如果我返回false,那么委托人什么也不做! –