2017-03-02 18 views
0

Ich habe eine RenderDelegate eingerichtet, um den Zellentext in einer anderen Farbe zu zeichnen. Ich habe die Eigenschaft OwnerDraw auch auf true gesetzt.RenderDelegate wird nicht aufgerufen

Dies ist der Code machen:

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

wird jedoch nichts angezeigt wird.

Was fehlt mir?

+0

@IvanKishchenko Winforms. 'olvInvoiceType' ist der Standard' OLVColumn' –

Antwort

0

Trotz was das Beispiel auf der ObjectListView Website sagt, es scheint, dass Sie wirklich und nicht falsch zurückgeben müssen.

Andere Beispiele, die ich gefunden habe, sind auch wahr.

Vergessen Sie auch nicht zu überprüfen, ob Ihr Objekt vor dem Rendern null ist, andernfalls wird eine Ausnahme ausgelöst!

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

Als ich versuchte, das ich schien das seltsame Problem zu haben, dass der Text zweimal gemacht wurde, nachdem die ursprünglich von der Steuerung in schwarz und dann von mir ein anderes Mal in rot!
Dies könnte ein Fehler sein, oder ich habe etwas verpasst.

Um dies zu umgehen dann musste ich den Hintergrund fillrectangele malen, aber dann haben Sie das Problem, wenn die Zeile ausgewählt ist, so dass Sie dies separat behandeln müssten.

Ich fand auch, dass OwnerDraw keinen Unterschied machte!

+0

Ihr Text wird zweimal gezeichnet, weil Sie true zurückgeben, wenn Sie false zurückgeben sollen. –

+0

Aber wenn ich falsch zurückgebe, tut der Delegierte nichts! –