2014-11-09 3 views
0

Я хотел бы написать пользовательский CellRenderer, который форматирует его содержимое. Вместо отображения -905.65000 он должен отображать -905.65 €. Я уже мог добиться этого с помощью Gtk.TreeCellDataFunc, но он был бы более изящным с пользовательским CellRenderer.Gtk.CellRendererText с форматом

После код дает ошибку сегментации:

class CellRendererTextFormat : Gtk.CellRendererText { 
    public new string text { 
     get { return text; } 
     set { 
     char[] a = new char[16]; 
     text = double.parse(value).format(a,"%-.2f €"); 
     } 
    } 

    public CellRendererTextFormat() { 
     GLib.Object(); 
    } 
} 

Как я должен это делать вместо этого?

ответ

1

Есть две проблемы:

1) text присваивается память для a, который освобождается. Вам необходимо присвоить его памяти, которая долговечна за пределами set.

2) value - это строка (потому что вы можете присваивать значения свойств одного и того же типа). У вас на самом деле есть строки, или вы положили его в parse, чтобы заставить его работать?

Вместо:

class CellRendererEuroValue : Gtk.CellRendererText { 
    char[] euro_str = new char[16]; 
    private double _euro_value; 
    public double euro_value { 
     get { return _euro_value; } 
     set { 
     _euro_value = value; 
     value.format(euro_str,"%-.2f €"); 
     text = (string) euro_str; 
     } 
    } 

    public CellRendererTextFormat() { 
     GLib.Object(); 
    } 
} 
+0

да, значение является строкой, что мне нужно, чтобы разобрать в два раза. Вы изменили переменную 'text' на' euro_value', я действительно хотел переопределить параметр 'text' из' Gtk.CellRendererText', иначе вы бы указали на отображение 'euro_value'? – jkd

+0

Вы использовали 'new', поэтому в любом случае он не был бы переопределен. Вы должны разбираться вне настройки свойств, чтобы вы могли обрабатывать ошибки. Отредактировал код. – apmasell

+0

Спасибо большое, что сработало. Просто нужно добавить «euro_value» в мои атрибуты столбцов ... ^^ " – jkd

Смежные вопросы