Subject |
Re: Control passing back and fro in a form sub routine |
From |
Milind Nighojkar <milinigh@yahoo.com> |
Date |
Wed, 26 Jul 2023 18:33:39 -0400 |
Newsgroups |
dbase.getting-started |
Your suggestion noted on decribing the issue...
Thanks for your solution....
Mervyn Bick Wrote:
> On 2023/07/26 03:19, Milind Nighojkar wrote:
>
> > Mevin to clarify myslef I want to build scenerio on your example itself
> >
> > You have used set procedure to square.prg. I want to put something like this
> >
> > function square(nVal)
> > local retVal
> > do while nVal < = 5
> > retVal = nVal*nVal
> > *Display nVal onto the form and come baclk
> >
> > nVal = nVal+1
> > endd
> > return retVal
> >
> > here I want to go to square.form and display nVal onto the
> > *form and come back for next nVal
> >
> > Hope I clarify
> >
>
> Milind (and Akshat and anyone else out there :-) ), it helps if you
> quote only the relevant parts from a message when you reply but it is
> counter productive to quote the entire message. Using Web-News makes it
> worse as it includes the text from any attachements as well. Having to
> scroll through literally pages of meaningless text to get to your input
> is a nuisance. Please take the time to delete irrelevant text.
>
> Once again, there is more than one way to address your problem and it
> really depends on how you want to display the returned values. A
> function returns 1 value but this can be an array so you could do
> something like the following..
>
> function square1(nVal)
> local n, nVal, aArray
> aArray = new array()
> for n = nVal to nVal + 4 //will calculate 5 values
> aArray.add(n*n)
> next
> return aArray
>
>
> In your form, say in a pushbutton's onClick event handler,
>
> form.squares = square1(nStartvalue)
>
> This would place the values calculated in the program in an array stored
> in a user-defined property of the form. It would then be up to you to
> write code in the form to display the values in the array. See
> squares1.wfm
>
> It is, however, more usual to pass the values to be processed to the
> function one by one and deal with displaying them as each value is
> returned. See squares2.wfm In this case the loop to increment the
> values to be calculated is in the form rather than in the function.
>
> Neither way is "right" and neither way is "wrong" although my preference
> is to do things "one by one" with multiple calls to the function. By
> making the decision in the form of how many values to calculate gives
> the programmer far more control. If, after you have used the function
> that returns 5 values in several forms, you find you now need 7 values
> there is no problem if the number of iterations is detemined in
> individual forms. If you have to change the function this may cause
> problems in forms expecting only 5 values. It means you may need to
> write a new function. Having two fuctions that are almost, but not
> completely, identical is not good programming practice.
>
> Mervyn.
>
>
>
>
>
>
> function square1(nVal)
> local n, nVal, aArray
> aArray = new array()
> for n = nVal to nVal + 4
> aArray.add(n*n)
> next
> return aArray** END HEADER -- do not remove this line
> //
> // Generated on 2023-07-26
> //
> parameter bModal
> local f
> f = new square2Form()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class square2Form of FORM
> with (this)
> onOpen = class::FORM_ONOPEN
> height = 16.0
> left = 7.4286
> top = 1.6818
> width = 67.5714
> text = ""
> endwith
>
> this.PUSHBUTTON1 = new PUSHBUTTON(this)
> with (this.PUSHBUTTON1)
> onClick = class::PUSHBUTTON1_ONCLICK
> height = 2.0909
> left = 13.0
> top = 7.4091
> width = 15.2857
> text = "Calculate squares"
> endwith
>
> this.EDITOR1 = new EDITOR(this)
> with (this.EDITOR1)
> height = 8.1818
> left = 37.2857
> top = 3.5909
> width = 20.0
> value = ""
> endwith
>
>
> function ENTRYFIELD1_onGotFocus()
> this.value = ''
> form.entryfield2.value = ''
> return
>
> function PUSHBUTTON1_onClick()
> nStart = 3
> form.squares = square1(nStart)
> crlf = chr(13)+chr(10)
> for n = 1 to 5
> form.editor1.value += (n-1+nStart)+' * '+(n-1+nStart)+' = '+ form.squares[n]+CRLF
> next
> return
>
> function form_onOpen()
> set procedure to square1.prg
> return
>
> endclass
>
> ** END HEADER -- do not remove this line
> //
> // Generated on 2023-07-26
> //
> parameter bModal
> local f
> f = new square2Form()
> if (bModal)
> f.mdi = false // ensure not MDI
> f.readModal()
> else
> f.open()
> endif
>
> class square2Form of FORM
> with (this)
> onOpen = class::FORM_ONOPEN
> height = 16.0
> left = 7.4286
> top = 1.6818
> width = 67.5714
> text = ""
> endwith
>
> this.PUSHBUTTON1 = new PUSHBUTTON(this)
> with (this.PUSHBUTTON1)
> onClick = class::PUSHBUTTON1_ONCLICK
> height = 2.0909
> left = 13.0
> top = 7.4091
> width = 15.2857
> text = "Calculate squares"
> endwith
>
> this.EDITOR1 = new EDITOR(this)
> with (this.EDITOR1)
> height = 8.1818
> left = 37.2857
> top = 3.5909
> width = 20.0
> value = ""
> endwith
>
>
> function ENTRYFIELD1_onGotFocus()
> this.value = ''
> form.entryfield2.value = ''
> return
>
> function PUSHBUTTON1_onClick()
> crlf = chr(13)+chr(10)
> nStart = 3
> for n = nStart to 4+nStart
> form.editor1.value += str(n,2)+' * '+str(n,2)+' = '+ square(n)+CRLF
> next
> return
>
> function form_onOpen()
> set procedure to square.prg
> return
>
> endclass
>
|
|