【发布时间】:2013-01-13 16:34:53
【问题描述】:
我正在尝试通过单击按钮关闭代码中的 Gtk# Window。即该按钮应与标题栏中的X 按钮具有相同的效果。
虽然窗口确实关闭了,但单击我自己的按钮时DeleteEvent 不会触发,而不是单击X 标题栏按钮。
这是一些最小的示例代码:
using System;
using Gtk;
namespace GtkSharpTest
{
class Program
{
[STAThread]
public static void Main(string[] args)
{
Application.Init();
using (Window win = new Window("Test")) {
win.SetSizeRequest(300, 200);
win.Hidden += delegate(object sender, EventArgs e) {
Application.Quit();
};
win.DeleteEvent += delegate(object o, DeleteEventArgs e) {
using (MessageDialog dlg = new MessageDialog(win,
DialogFlags.Modal,
MessageType.Question,
ButtonsType.YesNo,
"Really close?")) {
ResponseType result = (ResponseType)dlg.Run();
dlg.Destroy();
if (result == ResponseType.No) {
e.RetVal = true;
}
}
};
Button bClose = Button.NewWithLabel("Close");
bClose.Clicked += delegate(object sender, EventArgs e) {
// ???
};
win.Add(bClose);
win.ShowAll();
Application.Run();
}
}
}
}
我要查找的行标有// ???。
我在那里尝试过各种电话:
win.Hide();win.HideAll();win.Destroy();
Hide 和 Destroy 都建议在 this forum 中关闭 Gtk 窗口。 The selected answer in this SO post 也建议 Destroy,甚至声称在调用该方法时会触发 delete 事件。但是,我无法重现该主张;所有上述方法只会使窗口消失,但只有在我使用 X 标题栏按钮关闭窗口时才会触发 DeleteEvent。
换句话说,您可以说我正在寻找与 Windows 窗体/WPF Close() 方法等效的 Gtk#。调用这些完全模拟了对 X 标题栏按钮的单击,因为相应的 Closing 事件被触发并且仍然有机会阻止表单/窗口被关闭。
【问题讨论】:
-
投反对票的原因,好吗?
标签: gtk#