How to Use a Container Object Instead of a Custom Object

Last reviewed: July 28, 1995
Article ID: Q132356
The information in this article applies to:
  • Microsoft Visual FoxPro for Windows, version 3.0

SUMMARY

This article describes how you can use the container control instead of the custom control to obtain additional functionality for your custom controls.

MORE INFORMATION

The container and custom classes are both Visual FoxPro base classes. Both can contain member objects that are user-defined controls. An object based on the custom class does not have a visual representation and receives the Init, Destroy, and Error events.

On another hand, the container class has a visual representation. An object based on the Container class can receive the following events: Click, DragDrop, GotFocus, MouseDown, MouseMove, Resize, Destroy, Error, LostFocus, MouseUp, and UiEnable.

The container class is therefore more versatile than the custom class. If you plan on performing operations that require a visual representation, such as moving an object to an area and using the DragDrop event, an object based on the Container class might be appropriate. If you do not want to represent the container visually, you can set the Visible property of the container to false (.F.).

For more information about the Container and Custom classes, search for Container object and Custom object in the Visual FoxPro Help file.

The following code sample shows how to use an object based on the Container class. In this code, a form is drawn that contains a container and a command button. The command button is dragged to the container. To run this code, copy and paste it into a program (.PRG) file. Once the form is displayed, drag the command button to the left, and drop it in the container. This functionality could not be achieved with a custom class.

Code Sample

PUBLIC oForm

oForm=CREATEOBJECT('MYFORM') oForm.SHOW

*:************************************************************************* *: *: Class:MYFORM BaseClass: FORM *: *:************************************************************************* DEFINE CLASS MYFORM AS FORM

   ADD OBJECT Container1 AS MYCONTAINER WITH Top=1, Left=1
   ADD OBJECT Command1 AS COMMANDBUTTON WITH Top=1,Width=78, Left=84,;
        DragMode=1
ENDDEFINE

*:************************************************************************* *: *: Class:MYCONTAINER BaseClass: CONTAINER *: *:*************************************************************************

DEFINE CLASS Mycontainer AS CONTAINER

   Dragmode=1
   Width=80

   PROCEDURE DragDrop
      PARAMETERS OSOURCE, XCOORD,YCOORD
      ONAME=OSOURCE.NAME
      nNberofMembers=AMEMBERS(atest,THIS,2)

      IF TYPE('atest')<>"U"  && there are member objects
         nIsObjectThere=ASCAN('atest',ALLTRIM(UPPER(ONAME)))
         IF nIsObjectThere<>0
            ONAME=ALLTRIM(ONAME)+ALLTRIM(STR(nNberofMembers+1))
         ENDIF
      ENDIF
      THIS.ADDOBJECT(ONAME,OSOURCE.CLASS)
      Oref=EVAL('this.'+oname)
      Oref.Top=(nNberofMembers*OSOURCE.HEIGHT)+3
      Oref.Visible=.T.
   ENDPROC
ENDDEFINE


Additional reference words: 3.00 VFoxWin
KBCategory: kbprg kbcode
KBSubcategory: FxprgClassoop


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: July 28, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.