Microsoft KB Archive/158250

= FIX: Inherited Code Fires Twice with DODEFAULT =

Article ID: 158250

Article Last Modified on 12/11/1999

-

APPLIES TO


 * Microsoft Visual FoxPro 5.0 Standard Edition

-



This article was previously published under Q158250



SYMPTOMS
When the DODEFAULT function is used in a subclass method, it executes a method in the parent with the same name. When the parent has no method with that name, it then looks to the grandparent for that method. If it exists, it is executed. If the grandparent has a NODEFAULT function, the code gets executed twice.



CAUSE
The parent in the above situation executes the code of the grandparent as its own. Because the grandparent has a NODEFAULT function, the parent calls the method of the grandparent again.



WORKAROUND
To work around this problem, place a method that has the same name in the parent. Place a DODEFAULT command in the parent method.



STATUS
This behavior is by design in the products listed at the beginning of this article. This behavior does not occur in Visual FoxPro 5.0a



Steps to Reproduce Behavior
  Create a program with the following code: ACTIVATE SCREEN CLEAR CREATEOBJECT("Test3") RETURN

DEFINE CLASS Test AS Form ENDDEFINE

DEFINE CLASS test1 AS Test PROCEDURE Load ACTIVATE SCREEN ? "Class Test1, this.Class="+this.Class+ ; ", this.ParentClass="+this.ParentClass DODEFAULT ENDPROC ENDDEFINE

DEFINE CLASS test2 AS test1 ENDDEFINE

DEFINE CLASS test3 AS test2 PROCEDURE Load ACTIVATE SCREEN ? "Class Test3, this.Class="+this.Class+ ; ", this.ParentClass="+this.ParentClass DODEFAULT ENDPROC ENDDEFINE  Run the code. The Load method of test1 prints twice.

Change Class test2 in the following way if you wish the code in test1 to execute only once: DEFINE CLASS test2 AS test1 PROCEDURE Load DODEFAULT ENDPROC ENDDEFINE The above code prevents Class test2 from running class test1's code as its own.

Keywords: kbbug kbfix kbvfp500afix kbprogramming KB158250

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.