我最近开始使用Vala编程语言开发Gtk + 3.x.我过去常常使用C#和visual studio完成相同的任务,但后来转移到了Linux。
如何在对话框中询问简单的确定/取消问题?在C#中,MessageBox.Show()非常简单。然而,Gtk似乎很烦人,我所做的每一次Google搜索都让我对Dialogs和事件处理程序产生了技术性的喋喋不休。
是否只有一个简单的功能,所以我可以这样做:
bool result = MessageBox.AskQuestion("Do you want to save?");
谢谢,
巴里史密斯答案 0 :(得分:4)
实际上,通过反复试验找到了它......
public bool show_question(string message, Gtk.Window window, MessageType mt)
{
Gtk.MessageDialog m = new Gtk.MessageDialog(window, DialogFlags.MODAL, mt, ButtonsType.OK_CANCEL, message);
Gtk.ResponseType result = (ResponseType)m.run ();
m.close ();
if (result == Gtk.ResponseType.OK)
{
return true;
}
else
{
return false;
}
}
答案 1 :(得分:3)
略有改进的版本:
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”响应通常不赞成。相反,建议使用包含与所讨论的动作有关的动词的按钮标签;所以在上面的例子中,“取消”和“覆盖”将是更好的选择(默认为取消,当然)。这对程序员来说需要一点点但更多的工作,但提供了更好的用户体验。