I am trying to set the CheckedIndex for the UltraOptionSet control.
Stepping through the debugger, when I first reach the line of code, the CheckedIndex value is -1.
The code then sets the value to 1.
The value immediately goes back to zero.
If I go to the locals window and change the CheckedIndex value to 1, it again goes right back to 0.
There are 3 items in the list but I cannot get the value to change.
What am I missing here. All the samples show setting the CheckedIndex.
Please help
Thanks
Ben
I put together a sample based on your instructions and it works as I expect. Try running this sample and let me know if it reproduces the issue. If not, please modify the sample so that it does reproduce and send it back to me so I can continue to investigate.
OptionSetTest.zip
List<Control> controls = new List<Control>();private const string AcceptableControls = "UltraCheckEditor,UltraCombo,UltraDateTimeEditor,UltraMaskedEdit,UltraOptionSet,UltraTextEditor,UltraComboEditor,UltraCurrencyEditor,UltraDropDown,UltraDropDownButton,UltraRadioButton";
// Loop through panel.Controls to locate specific controls// Add those controls to the controls list defined above.// All controls are fully instantiated and visible on the screen.// So its not an issue with trying to set the CheckedIndex to soon.// In addition, the options do not have the same text. (Yes, No or In Person, Remote, etc.)// It also dosnt matter how many options there are.foreach (Control c in panel.Controls){ // Is it one of the controls we are looking for if (AcceptableControls.Contains(c.GetType().Name)) { // Add the control to our list controls.Add(c); }}
// Go find control and set valuesforeach (Control c in controls){ // ctrlName is a string read from an XML file. Its just the name of ANY control. ctrl.Name = txtText, or lblLabel, etc. // All this is doing is reading an XML, finding the matchine control in the control array and setting the property if (String.Compare(c.Name, ctrlName, true) == 0) { if (String.Compare(controlType, "UltraCheckEditor", true) == 0) { ((UltraCheckEditor)c).Checked = ctrlChecked.ToBool(); } if (String.Compare(controlType, "UltraOptionSet", true) == 0) { int index = ctrlCheckedIndex.ConvertTo<int>(); ((UltraOptionSet)c).Items[index].CheckState = CheckState.Checked; // When I save the information, I save the CheckedIndex value. // When loading the data back in, setting the CheckedIndex has no effect // I have worked around it for, see two lines above. } else { c.Text = ctrlText; } }}
You can also just open the VS Designer and drop some UltraOptionSet controls on it.In code, loop through all the controls in the form.Controls arrayFor each UltraOptionSet control in the array, try to set the CheckedIndex value.That is all that this code is doing. There just happens to be other control types on the form, which have controls which have controls, and so on.
Hi Ben,
Thank you for sending your code. I attempted to include it in a small sample, but was not able to get anything working. I am not sure what is intended to be in the AcceptableControls collection, nor what the expected value of any of the strings used in the comparisons should be.
I understand that you have found a way to work around this. Do you find the workaround acceptable, or would you prefer to send a sample application that I can run to continue debugging this issue?
List<Control> controls = new List<Control>();
// Loop through panel.Controls to locate specific controls// Add those controls to the controls list defined above.// All controls are fully instantiated and visible on the screen.// So its not an issue with trying to set the CheckedIndex to soon.// In addition, the options do not have the same text. (Yes, No or In Person, Remote, etc.)// It also dosnt matter how many options there are.foreach (Control c in panel.Controls){ // Is it one of the controls we are looking for if (AcceptableControls.Contains(c.GetType().Name)) { // Add the control to our list controls.Add(c); }} // Go find control and set valuesforeach (Control c in controls){ if (String.Compare(c.Name, ctrlName, true) == 0) { if (String.Compare(controlType, "UltraCheckEditor", true) == 0) { ((UltraCheckEditor)c).Checked = ctrlChecked.ToBool(); } if (String.Compare(controlType, "UltraOptionSet", true) == 0) { int index = ctrlCheckedIndex.ConvertTo<int>(); ((UltraOptionSet)c).Items[index].CheckState = CheckState.Checked; // When I save the information, I save the CheckedIndex value. // When loading the data back in, setting the CheckedIndex has no effect // I have worked around it for, see two lines above. } else { c.Text = ctrlText; } }}
Here is the code.
// Loop through panel.Controls to locate specific controls (Windows Panel)// Add those controls to the controls list defined above.// All controls are fully instantiated and visible on the screen.// So its not an issue with trying to set the CheckedIndex to soon.// In addition, the options do not have the same text. (Yes, No or In Person, Remote, etc.)// It also doesn't matter how many options there are.foreach (Control c in panel.Controls){ // Is it one of the controls we are looking for if (AcceptableControls.Contains(c.GetType().Name)) { // Add the control to our list controls.Add(c); }} // Go find control and set valuesforeach (Control c in controls){ if (String.Compare(c.Name, ctrlName, true) == 0) { if (String.Compare(controlType, "UltraCheckEditor", true) == 0) { ((UltraCheckEditor)c).Checked = ctrlChecked.ToBool(); } if (String.Compare(controlType, "UltraOptionSet", true) == 0) { int index = ctrlCheckedIndex.ConvertTo<int>(); ((UltraOptionSet)c).Items[index].CheckState = CheckState.Checked; // When I save the information, I save the CheckedIndex value. // When loading the data back in, setting the CheckedIndex has no effect // I have worked around it for now, see two lines above.
// An additional issue I have found, is that reading the CheckState ALWAYS returns unchecked even when it is checked.
} else { c.Text = ctrlText; } }}