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 ラッパーは、最初に呼び出されてハンドラーを切断する独自の destroy イベント ハンドラーをインストールします。ただし、それは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 に答える