[Gambas-user] refer to an object with a string
Charlie Reinl
Karl.Reinl at ...9...
Sun Aug 16 21:01:02 CEST 2009
Am Sonntag, den 16.08.2009, 19:08 +0200 schrieb Doriano Blengino:
> Jean-Yves F. Barbier ha scritto:
> > Doriano Blengino a écrit :
> >
> >> Jean-Yves F. Barbier ha scritto:
> >>
> >>> Hi list,
> >>>
> >>> I'm trying to refer to come couples Label/CheckBox that have the same suffix
> >>> (lbl_ONE & ckb_ONE) to enable/disable couple in one shot.
> >>>
> >>> But after building my strings that are orders, GB tell me its not an object:
> >>>
> >>> PUBLIC SUB lblckb_on_off(which AS String, on AS Boolean)
> >>> DIM lbl AS String
> >>> DIM ckb AS String
> >>>
> >>> lbl = "lbl_" & which & ".Enabled = "
> >>> ckb = "ckb_" & which & ".Enabled = "
> >>> IF onoff THEN ' ON
> >>> lbl &= "TRUE"
> >>> ckb &= "TRUE"
> >>> (SOMETHING TO "EXEC" THE STRING)lbl (or may be: (SOMETHING)lbl = TRUE)
> >>> (SOMETHING TO "EXEC" THE STRING)ckb
> >>> ENDIF
> >>> END
> >>>
> >>> Is there a way to do that?
> >>>
> >>>
> >> The EVAL statement, but I never used it and also I am not sure it exists
> >> in gambas2.
> >>
> >
> > Yes it exists, however I'm not tough enough to tell if it can work that way
> >
> >
> >> But there are other ways, more efficient. One is to find object handlers
> >> using introspection. You can find all the children of a form and, based
> >> on their name, do things (you can also scan all the children and, when
> >> you find the one which has the right name, do the thing you want). The
> >>
> >
> > I don't see (may be you're talking about iterating form content is a Variant)
> >
>
> The following is a routine which transfers data from a form (or other
> container) to a record of a database.
> The gadgets which are operated on are named like "edDBxxxx", where
> "xxxx" is the name of the field in the database.
> This routine manages textboxes, checkboxes and other; i attach it
> because you can see how to walk in a form,
> get the names and operate on gadgets:
>
> ' transfers a record from page to database; TRUE if error
> PUBLIC SUB save_record(hCont AS Container, recmod AS Result) AS Boolean
> DIM obj AS Object
> DIM st AS String
>
> FOR EACH obj IN hCont.Children
> IF obj.name LIKE "edDB*" THEN
> SELECT Lower(object.Type(obj))
> CASE "textbox", "tdbsimplebox"
> recmod[Mid(obj.name, 5)] = obj.text
>
> CASE "tdbcalcbox"
> recmod[Mid(obj.name, 5)] = utils.formatted2float(obj.text)
>
> CASE "tdbdatebox"
> st = canonicaldate(obj.text)
> IF st <> "" THEN recmod[Mid(obj.name, 5)] = Val(st)
>
> CASE "checkbox"
> recmod[Mid(obj.name, 5)] = obj.value
default
'check here if it is a Container
' if yes call save_record(obj,recmod)
>
> END SELECT
> ENDIF
> NEXT
> recmod.Update
> RETURN FALSE
>
> CATCH
> Message.Error("Error " & error.Text & " in " & error.Where)
> RETURN TRUE
> END
>
>
> >> other one, which I would recommed, is to create dynamically you objects,
> >> especially if they are many, and keep a reference to them using arrays
> >> or collections. Or a mix of the two: you create a form visually in the
> >> IDE, then in a routine collect all the handlers, and from then on you
> >> always use those handlers. I suspect you are doing something very large...
> >>
> >
> > No, in fact, not that big.
> > On 2nd thought, it wasn't a good idea (even if it has worked, code would have
> > been beeing too much obscur)
> >
> I saw a "Label2572"... it seemed to me a little strange...
> And about obscure code, I think that well commented (and written!) code
> is never obscure, but sometimes one writes code too much complex for the
> purpose that has to be done. I sometimes do that...
>
> Re-regards,
>
> --
> Doriano Blengino
>
> "Listen twice before you speak.
> This is why we have two ears, but only one mouth."
More information about the User
mailing list