2012-01-30 2 views
0

사용자 정의 GTK 창이 있습니다. 나는 단순히 DeleteEvent 이벤트에 이벤트 핸들러를 추가하여 MonoDevelop 또는 "직접"을 사용하여 DeleteEvent에 연결하려고합니다.GTK 창 DeleteEvent가 실행되지 않음

그러나 오른쪽 위 모서리에있는 "X"버튼 (닫기 버튼)을 클릭하면 이벤트가 실행되지 않습니다.

왜? 이것은 나에게 의미가 없습니다.

답변

2

밝혀졌습니다. 이벤트가 발생하기 전에 창 인스턴스가 삭제되었습니다.

나는 한마디로 GTK를 설명해야한다면, 그것은 것 "모호한".

개인적으로 이벤트가 처리 된 개체에 대해 해고 될 경우 예외가 발생한다고 예상됩니다. 마찬가지로, 처분 될 때 창을 숨기거나 파괴 할 것으로 기대합니다. 이들 중 어느 것도 그렇지 않습니다.

학습 교재.

+1

GTK #은 GTK +를 둘러싼 .NET 래퍼이며, GTK +는 계산 된 참조로 객체를 유지한다는 것을 명심하십시오. 그래서 관리 객체를 처리 할 때 참조 카운트가 삭제되고 (신호는 연결이 끊어집니다!), 참조 자체가 0에 도달 할 때까지 창 자체가 파괴되지 않습니다. 화면에서 실현되기 때문에 0에 도달하지 않으며 창 관리자는 하나의 참조를 보유합니다. 이것은 파일과 같습니다. 파일 시스템의 파일은'System.IO.File' 객체를 삭제하면 사라지지 않습니다. 'Delete'를 호출해야합니다. 마찬가지로 창은'파괴 '라고 부를 때까지 주변에있을 것입니다. – rodrigo

+1

물론, 여러분이 말했듯이, 그것은 GTK +를 둘러싼 .NET 래퍼입니다. 해당 래퍼에 포함 된. NET 표준 오류 처리 싶습니다. 그렇지 않으면, 나뿐만 아니라 내 자신의 래퍼를 쓸 수도 있습니다. 처분 될 때 창문이 어떻게 스스로 파괴되지 않습니까? 어떤 경우에 처분되는 동안 창을 보이기를 원하십니까? –

+0

@ChristopherHarris, Dispose는 Destroy와 같지 않습니다. 그것은 파일 핸들을 갖는 것과 같습니다. 여기에는 창 핸들이 있습니다. – IanNorton