If it is by design, then that's cool; people just need to be aware of it if they want to write clean KiXforms apps. That is why this discussion is good and at least there is a current working solution/work around that people can use. In any case, the dispose method on controls is not documented so I'm sure many people wouldn't know to do it. I feel there is definitely a bug here however as one would expect that calling .dispose() on a form should successfully dispose of the form, but it doesn't. Only by recursing through all the controls and calling .dispose() on every control from the branches back to the root, can the resources be successfully released.

It would however seem natural to me that a form or control should automatically be disposed of when there is no longer any programmatic reference to it.