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 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." ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user