0
私はカスタムGTKウィンドウを持っています。私は、単にDeleteEventイベントにイベントハンドラを追加することで、MonoDevelopまたは "手作業"のいずれかを使用して、DeleteEventにフックしようとしています。GTKウィンドウDeleteEventが発射されない
ただし、ウィンドウの右上にある「X」ボタン(終了ボタン)をクリックすると、イベントは発生しません。
なぜですか?これは私には意味がありません。
GTK#はGTK +の周りの.NETラッパーであり、GTK +はカウントされた参照でオブジェクトを保持します。だからあなたがあなたが管理対象オブジェクトを処分するとき、参照カウントはちょうど落とされます(信号は切断されます)が、その参照は0に達するまでウィンドウ自体は破壊されません。ウィンドウマネージャは1つの参照を保持します。これはファイルのようなものです。ファイルシステム内のファイルは 'System.IO.File'オブジェクトを破棄するだけでは消えません。 'Delete'を呼び出さなければなりません。同様に、ウィンドウはあなたが 'destroy'と呼ぶまで周りにいます。 – rodrigo
もちろん、あなたが言ったように、それはGTK +の周りの.NETラッパーです。そのラッパーに.NET標準エラー処理が含まれています。さもなければ、私は自分のラッパーを書くだけかもしれません。そして、ディスポーザルが呼ばれたときに、ウィンドウがどうやって破壊されないのでしょうか?どのような場合には、廃棄中にウィンドウを表示したいでしょうか? –
@ChristopherHarris、DisposeはDestroyと同じではありません。これは、ファイルへのハンドルを持つようなものです。ここにはウィンドウのハンドルがあります。 – IanNorton