11/26/2024 6:21:29 PM
|
|
slxdeveloper.com Community Forums |
|
|
|
The Forums on slxdeveloper.com are now retired. The forum archive will remain available for the time being. Thank you for your participation on slxdeveloper.com!
Forum to discuss writing script in Architect plugins for SalesLogix & general SalesLogix customization topics (for Windows client only). View the code of conduct for posting guidelines.
|
|
|
|
Dynamically Set Control Properties in v6.2
Posted: 26 Oct 06 3:15 PM
|
fiogf49gjkf0d One very useful method of dynamically programming control properties in v5.2 was to get and set the control properties using variables. For Example, if you had 8 check boxes and 8 corresponding textboxes, you could easily set the visibility of each textbox based on the corresponding checkbox being checked or not by calling a common script like this:
For i = 1 to 8 If GetPropertyOf("CheckBox" & i, "Text") = "T" then SetPropertyOf "TextBox" & i, "Visible", "False" Else SetPropertyOf "TextBox" & i, "Visible", "True" End If Next i
Anyone know of an equivalent way of doing this in v6.2?
Thanks.
Brett
|
|
|
| |
|
Re: Dynamically Set Control Properties in v6.2
Posted: 26 Oct 06 3:32 PM
|
fiogf49gjkf0d Another alternative is to use VBScipt's Execute function (Refer to the VBScript docs for full reference). The Execute statement allows you to execute a string of code as part of the script. Also, the Eval function will do the same but return the result of an evaluation.
You could rewrite the code you posted as this:
For i = 1 To 8 If Eval("CheckBox" & i & ".Checked") Then Execute "TextBox" & i & ".Visible = False" Else Execute "TextBox" & i & ".Visible = True" End If Next
Something like that anyway. Although, IMO using the controls collection, like I posted before, would provide a more elegant solution. |
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 26 Oct 06 3:57 PM
|
fiogf49gjkf0d I can see how it can be done using the VB Eval and Execute functions, but looking at the more elegant solution of iterating through the form controls, I still can't see how that would work.
If you check chk8, how would you ONLY make the corresponding txt8 control visible? I can easily determine that it was the chk8 control that invoked the script, and that the chk8.text value is T or F, but I'm not clear on how I would then SET the txt8.visible = TRUE or FALSE. I can see how to set ALL text boxes to visible, but not how to only do it for a specific one.
Muchos Gracias! |
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 26 Oct 06 4:14 PM
|
fiogf49gjkf0d It's been a while since I tried this, but IIRC, you can reference items in the collection by index or name:
If Controls("CheckBox1").Checked Then Controls("TextBox1").Visible = False
But like I said, it's been a while since I tried that so I might be remembering it wrong (I'll leave it to you to test ) |
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 27 Oct 06 2:10 PM
|
fiogf49gjkf0d Big duh moment: I didn't know about Eval or Execute and I've worked around it years ago. Sad.
If there are 10 controls or less, I generally hard-code whatever I need. If hard-coding isn't an option I'll either use an array to link the controls somehow or use similar Control.Name properties, creating a map of sorts. I'd then loop through the array setting the properties accordingly. I prefer arrays because it allows me to build everything once looping through the control collection but if something is screwy it won't have to halt mid-stream.
Taking the mapping idea a step further, I place all of the controls on the same panel. Then I can check to make sure Control.Parent.Name = "panelWhatever" and only affect controls on that panel. GroupBoxes and Tabs also have Parent.Name properties I believe, so controls placed on those can utilize the technique as well. An added side effect is the fact that all of the controls are created within the same space, so they should be close together when you loop through the controls collection. |
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 28 Oct 06 4:41 PM
|
fiogf49gjkf0d How many controls are you talking about? If it’s just a few, I would agree with Jeremy's previous post and leave them hard-coded.
Such an optimization, in my opinion, would make the supporting code a bit obscure and would potentially affect future maintenance or extension the affected form.
There would have to be a sound justification like demonstrating some sort of performance gain.
Alternatively, if the controls you wish to hide are functionally related to each other, you can place them on one or more Panels and simply hide the panel by setting its “Visible” property to False.
|
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 29 Oct 06 9:30 AM
|
fiogf49gjkf0d To go along with what Ryan said, you can use the name of the control with the Controls collection. First, make sure your Textbox and Checkbox have similar names( [txt1 | chk1] or [txtQuestion1 | chkQuestion1])
Then, have each checkbox point to a common OnClick event. Inside that event, take out the first 3 characters of the controls name and build your textbox name
dim commonname dim txtname
'common name of controls excludes the first 3 characters here, change code to reflect your naming convention commonname = right(Sender.Name, len(Sender.name) - 3) txtname = "txt" & commonname
Now that we have the name of the Textbox, set its visibility
Controls(txtname).Visible = Sender.Checked |
|
|
|
Re: Dynamically Set Control Properties in v6.2
Posted: 30 Oct 06 8:53 AM
|
fiogf49gjkf0d Thanks, Doug. That is actually what I was looking for. I didn't realize you could pass the control name built into a variable into the Controls(var) object property.
Knowing about the Eval and Execute methods is very helpful too. Thanks to all. |
|
|
|
You can
subscribe to receive a daily forum digest in your
user profile. View the site code
of conduct for posting guidelines.
Forum RSS Feed - Subscribe to the forum RSS feed to keep on top of the latest forum activity!
|
|
|
|
|
|
|
|