Gtk.cellRenderText格式为
我想写一个定制的CellRenderer来格式化它的内容。与其显示Gtk.cellRenderText格式为,gtk,vala,Gtk,Vala,我想写一个定制的CellRenderer来格式化它的内容。与其显示-905.65000,不如显示-905.65€。我已经可以通过Gtk.TreeCellDataFunc实现这一点,但如果使用自定义CellRenderer,它会更加优雅 以下代码给出了分段错误: class CellRendererTextFormat : Gtk.CellRendererText { public new string text { get { return text; } set
-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
分配内存,该内存被释放。您需要将其分配给超出集合
范围的持久内存
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 ();
}
}
是的,value是我需要解析为double的字符串。您通过
euro\u value
更改了变量text
,实际上我想从Gtk.cellRenderText
覆盖text
参数,您是否会以其他方式显示euro\u value
?您使用的是new
,因此它不会被覆盖。您应该在属性设置器之外进行分析,以便处理错误。编辑了代码。非常感谢,成功了。只需要将“欧元价值”添加到我的列属性中^^"