3

在 Gtk# 中,我可以为“destroy”事件连接一个处理程序,但它永远不会被调用。此应用程序从不打印任何内容。Gtk 文档说“destroy”事件只有在设置了某个标志时才会发送,并且还说这个标志是由 Gdk 自动设置的。

这是令人沮丧的,因为它基本上与正常工作的普通 Gtk+ 代码相同。Application.Quit()除了听“destroy”事件外,我怎么知道什么时候打电话?

using System;
using Gtk;

public class MainWindow {
    public static void Main(string[] args)
    {
        Application.Init();
        Window win = new Window("Test");
        win.Resize(200, 200);
        win.DestroyEvent += new DestroyEventHandler(OnDestroy);
        win.ShowAll();
        Application.Run();
    }

    private static void OnDestroy(object o, DestroyEventArgs args)
    {
        Console.WriteLine("OnDestroy");
    }
}

PS我对“删除”事件不感兴趣。

4

1 回答 1

4

gtk-sharp 包装器安装它自己的销毁事件处理程序,该处理程序首先被调用并断开您的处理程序。然而反过来,它提供了一个Destroyed事件。您可以使用它,如下所示:

using System;
using Gtk;

public class MainWindow {
    public static void Main(string[] args)
    {
        Application.Init();
        Window win = new Window("Test");
        win.Resize(200, 200);
        win.Destroyed += new EventHandler(OnDestroy);
        win.ShowAll();
        Application.Run();
    }

    private static void OnDestroy(object o, EventArgs args)
    {
        Console.WriteLine("OnDestroy");
        Application.Quit();
    }
}
于 2012-11-03T16:32:43.143 回答