我想写一个自定义的CellRenderer来格式化它的内容。与其显示-905.65000
,不如显示-905.65 €
。我已经可以用Gtk.TreeCellDataFunc
实现这一点,但使用自定义CellRenderer会更优雅。
以下代码给出分段错误:
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) 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 ();
}
}