2012-01-30 18 views
0

私はカスタムGTKウィンドウを持っています。私は、単にDeleteEventイベントにイベントハンドラを追加することで、MonoDevelopまたは "手作業"のいずれかを使用して、DeleteEventにフックしようとしています。GTKウィンドウDeleteEventが発射されない

ただし、ウィンドウの右上にある「X」ボタン(終了ボタン)をクリックすると、イベントは発生しません。

なぜですか?これは私には意味がありません。

答えて

2

私は、イベントが発生するまでにウィンドウインスタンスを破棄していました。

私は一言でGTKを記述しなければならないとしたら、それは「曖昧」になります。

個人的には、イベントが配置されたオブジェクトに対して発生すると想定される場合、例外がスローされることが予想されます。同様に、私はウィンドウが隠される(または破壊される)と予想します。これらのどちらも当てはまりません。

レッスン学習済み。

+1

GTK#はGTK +の周りの.NETラッパーであり、GTK +はカウントされた参照でオブジェクトを保持します。だからあなたがあなたが管理対象オブジェクトを処分するとき、参照カウントはちょうど落とされます(信号は切断されます)が、その参照は0に達するまでウィンドウ自体は破壊されません。ウィンドウマネージャは1つの参照を保持します。これはファイルのようなものです。ファイルシステム内のファイルは 'System.IO.File'オブジェクトを破棄するだけでは消えません。 'Delete'を呼び出さなければなりません。同様に、ウィンドウはあなたが 'destroy'と呼ぶまで周りにいます。 – rodrigo

+1

もちろん、あなたが言ったように、それはGTK +の周りの.NETラッパーです。そのラッパーに.NET標準エラー処理が含まれています。さもなければ、私は自分のラッパーを書くだけかもしれません。そして、ディスポーザルが呼ばれたときに、ウィンドウがどうやって破壊されないのでしょうか?どのような場合には、廃棄中にウィンドウを表示したいでしょうか? –

+0

@ChristopherHarris、DisposeはDestroyと同じではありません。これは、ファイルへのハンドルを持つようなものです。ここにはウィンドウのハンドルがあります。 – IanNorton

関連する問題