Не уверен, имеет ли название смысл, поэтому вот полный контекст:
Я пишу код на C #. Я сделал приложение с несколькими пользовательскими элементами управления, в каждом из которых много текстовых полей и радиокнопок. Все радиокнопки располагаются на панели в наборе из 2, что выглядит следующим образом:
[ <label> O <radiobutton1text> O <radiobutton2text> ]
(в то время как первая радиокнопка имеет TabStop = true, а вторая TabStop = false)
При переходе на такую панель фокусируется только текст radiobutton1, а при нажатии клавиши со стрелкой влево выбирается текст radiobutton2. Это желаемый результат.
Чтобы ускорить загрузку UserControl во второй (и выше) раз, я не закрываю его, а заменяю его другим UserControl каждый раз, когда необходимо изменить содержимое. Но возникает проблема: когда открыт UserControl X, затем поверх него я открываю UserControl Y и затем возвращаюсь к X, текстовые поля и радиокнопки по-прежнему содержат содержимое с первого сеанса, когда у меня впервые был открыт UserControl X,(Мне необходимо сбросить содержимое текстовых полей и радиокнопок после замены UserControl).
Поэтому я создал функцию, которая перебирает все элементы управления и очищает их содержимое. Проблема в том, что когда я снимаю флажок с радиокнопок (и возвращаю им состояние TabStop в true), вторая радиокнопка становится вкладкой после того, как я проверяю одну из них и затем вызываю функцию, тогда как она не былаt перед выполнением этой функции.
Функция:
public void BackToMain(object sender, EventArgs e)
{
// Go through all controls and empty each TextBox, RichTextBox, RadioButton or ComboBox.
int parentControlsCount = Controls.Count - 1;
for (int i = parentControlsCount; i >= 0; i--)
{
if (Controls[i].HasChildren == true)
{
int childrenControlsCount = Controls[i].Controls.Count - 1;
for (int j = childrenControlsCount; j >= 0; j--)
{
var controlType = Controls[i].Controls[j].GetType().ToString();
switch (controlType)
{
case "System.Windows.Forms.TextBox":
case "System.Windows.Forms.RichTextBox":
Controls[i].Controls[j].Text = null;
break;
case "System.Windows.Forms.RadioButton":
// Restore both properties to default value
((RadioButton)Controls[i].Controls[j]).Checked = false;
if (j == 1)
((RadioButton)Controls[i].Controls[j]).TabStop = true;
else if (j == 2)
((RadioButton)Controls[i].Controls[j]).TabStop = false;
break;
case "System.Windows.Forms.ComboBox":
((ComboBox)Controls[i].Controls[j]).SelectedIndex = -1;
break;
}
}
}
}
}
Что я делаю не так?