RenderDelegate未被调用

时间:2017-03-02 11:31:39

标签: c# winforms objectlistview

我已设置RenderDelegate以不同颜色绘制单元格文本。我还将OwnerDraw属性设置为true

这是渲染代码:

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;
};

但是,没有显示任何内容。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

尽管ObjectListView网站上的示例显示您实际上必须返回true,而不是false。

我发现的其他例子也是真的。

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

public Tokens getTokens(final String authorizationCode, final String redirectUri) {
    Validate.notNull(authorizationCode);
    Validate.notNull(redirectUri);
    System.out.println("Sending request with code to retrieve tokens.");
    final Credentials creds = authenticationAPIClient
            .token(authorizationCode, redirectUri) 
            .setClientSecret(clientSecret).execute();       
    return new Tokens(creds.getIdToken(), creds.getAccessToken(), creds.getType(), creds.getRefreshToken());
}

当我尝试这个时,我似乎有一个奇怪的问题,即文本被渲染两次,一次是由黑色的控制,然后是另一次由我红色! 这可能是一个错误,或者我可能错过了一些东西。

为了解决这个问题,我必须将背景绘制为fillrectangele,但如果选中该行,则会出现问题,因此您需要单独处理。

我还发现OwnerDraw没有任何区别!

答案 1 :(得分:0)

我知道这是一个老问题,但我遇到了同样的问题,找不到正确的答案。我留下我的答案,也许对某人有帮助。

nameColumn.RendererDelegate不管我做什么或处于哪种OwnerRender模式都不会被调用。

nameColumn.Renderer = SomeCustomIRenderer也不管我做什么都不被完全称呼。

我设法通过添加以下内容解决了该问题:

treeListView.CellRendererGetter = (object rowObject, OLVColumn column) => new MyCustomIRenderer();然后才真正调用了我的自定义渲染器。

最简单的方法是覆盖您自己的BaseRenderer或仅从此处复制http://objectlistview.sourceforge.net/cs/ownerDraw.html#owner-draw-label