Tom,
I don't know if I understood what you said completely. You are issuing NODEFAULT then calling DoDefault() and then wondering why DoDefault() did the default behavior?
If you want the class code to run without the default behavior you need a NODEFAULT in the class code as well. Then in your form you must call the class code with the scope resolution operator ::. Using DoDefault() will always run the class code and the default base behavior.