稍微改进的版本:
public bool show_question(string primary_markup,
string? secondary_markup = null,
Gtk.Window? parent = null,
Gtk.MessageType message_type = Gtk.MessageType.QUESTION)
{
var m = new Gtk.MessageDialog.with_markup(parent,
Gtk.DialogFlags.MODAL,
message_type,
Gtk.ButtonsType.OK_CANCEL,
primary_markup);
m.format_secondary_markup(secondary_markup);
var result = (Gtk.ResponseType) m.run();
m.destroy();
return (result == Gtk.ResponseType.OK);
}
这个新版本利用了 Vala 的默认参数,所以在最简单的情况下你可以调用show_question("Is this OK?");
. 此外,您现在还可以使用Pango Markup生成更好看的对话框,例如:
show_question("<b><big>Overwrite File?</big></b>",
"<small>The file <i>\"%s\"</i> will be overwritten if you proceed</small>".printf(my_filename),
parent_window,
Gtk.MessageType.WARNING);
然而值得注意的是,在 GTK 中,像这样使用简单的“OK/CANCEL”响应通常是不受欢迎的。相反,建议使用包含与相关动作相关的动词的按钮标签;所以在上面的例子中,“取消”和“覆盖”会是更好的选择(当然,默认为取消)。这对程序员来说需要一点但更多的工作,但提供了更好的用户体验。