我已设置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;
};
但是,没有显示任何内容。
我错过了什么?
答案 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