>   1. A single EditBox that changes sizes as appropriate. - This will
>require changing the event actions based on the state of the control but
>will eliminate the addressing problems.
>   2. A ListBox that creates and destroys a temporary EditBox. - This will
>require figuring out how to address the properties of the boxes from each
>other.
>   3. A Container with a ListBox and an EditBox that toggles between
>visible and invisible. - This will require learning how to use a
>container object and seems more complex.
>
>My goal is to have a reusable class with the functionality I need.  It is
>also to learn how to work with VFP classes.  Most of the replies I have
>gotten suggest the third approach.  At this point I see it as forcing
>even more learning before success but it may still be the best/quickest
>approach.   Is this a case where any one of the three approaches can work
>equally well and personal preference/experience determines the best
>approach or do 1 or 2 have flaws that mean they need to be abandoned?

Hi Joe,

I would say that the container is the best approach.

You want something you can just drop on a form, and the container can 
contain everything you need in one object.

You can construct the thing visually. Just edit the container and drag and 
drop the controls into it. This establishes the relationships between them.

Also, it is actually less complicated than the other approaches. It takes 
the place of the form you're using now. Basically, you put almost all the 
code into the container and have your textbox, editbox, and list control 
all talk to the container. The textbox tells the container that it's 
received a numeric operator; the container tells the editbox to appear and 
add a line. Think of it as a "mediator" or "controller" (I get points for 
terminology for those words! :))  The editbox notifies the container when 
it's got everything needed for the calculation. The container does the 
calculation and passes the result to the textbox.

In this case, the container will be referenced from within the other 
controls as .Parent. As in something like this (just examples; not 
recommending anything and I'm sure it could be much more elegant):

textbox InteractiveChange()
     LOCAL contents

     contents = THIS.Value

     IF "+" $ contents OR "-" $ contents
         THIS.Parent.AcceptOperator(contents)
     ENDIF

container AcceptOperator()
     LPARAMETERS cText

    IF [whatver about cText]
         THIS.textbox.Visible = .F.

         THIS.CalculatingEditbox.AcceptInput(cText)
    ENDIF

CalculatingEditbox AcceptInput()
    LPARAMETERS cText

    IF NOT EMPTY(THIS.Value)
         THIS.Value = THIS.Value + CHR(13)
    ENDIF

    IF [whatever about cText]
        THIS.Visible = .T.

        THIS.Height = THIS.Height + [whatever]

        THIS.Value = THIS.Value + whatever..

        THIS.Parent.Calculate(cText)
    ENDIF

Containter Calculate()
     LPARAMETERS cText

     LOCAL result

    * Parse
    * Parse
    * Parse

    THIS.Textbox.Value = result

    THIS.Textbox.Visible = .T.
    THIS.CalculatingEditbox.Visible = .F.

Doing it this way makes it very easy to make changes at each step of the 
process.

You may find that your textbox and editbox also need to be subclassed 
before they can communicate effectively with the container. For a situation 
like this, I'd have them, along with the container, in the same .vcx file 
(I agree with those who use .vcx for visual subclasses).

Ken Dibble
www.stic-cil.org



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: 
http://leafe.com/archives/byMID/profox/[email protected]
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to