У меня есть пара обычных Windows Forms. Для того, чтобы очистить поля ввода данных в одном из них я использую код что-то вроде этого:некоторые элементы управления формой окна не распознаются?
ClearInputFields(this);
private void ClearInputFields(Control Page)
{
try
{
foreach (Control ctrl in Page.Controls)
{
if (ctrl is Button)
continue;
if (ctrl is DataGridView)
continue;
if (ctrl is ListBox)
continue;
if (ctrl is TextBox)
{
((TextBox)(ctrl)).Text = string.Empty;
}
else if (ctrl is ComboBox)
{
((ComboBox)(ctrl)).SelectedIndex = 0;
}
else if (ctrl is CheckBox)
{
((CheckBox)(ctrl)).Checked = false;
}
else if (ctrl.Controls.Count > 0)
{
ClearInputFields(ctrl);
}
}
}
catch (Exception ex)
{
TraceFile.Error("ExceptionLog", ex);
}
}
На одной из форм он работает, как ожидалось. На другой форме два из девяти ComboBox не сбрасываются, и ни одна из шести CheckBoxes не очищается.
Пройдя через отладчик, кажется, что отдельные элементы управления даже не входят в список элементов управления, содержащихся в форме.?!
Я сравнил формы и не вижу ничего другого в свойствах этих элементов управления. Один из comboBoxes, который не распознается, является привязкой к базе данных, один - нет, но это также верно в случае сбрасываемых.
Я рассмотрел конструктора, и все элементы управления объявлены как «this.Controls.Add (this.name_of_control);»
Я пробовал оставить последнее «еще если» (в любом случае на этой форме нет панелей, групповых ящиков или других контейнеров). Никакой разницы в поведении.
Если я явно устанавливаю флажки в «Проверено = ложь» и устанавливаю ComboBoxes в «SelectedIndex = 0», они делают то, что я ожидаю, но не при повторении с помощью элементов управления формы.
EDIT - добавление: все элементы управления создаются в Дизайнере, а не во время выполнения. Как уже упоминалось, на форме нет контейнеров.
Я ожидаю, что это один из тех простых, очевидных, прямо под ваши проблемы с носом, но до сих пор я этого не вижу.
Любое понимание оценено. Благодаря!
Создаете ли вы какой-либо элемент управления во время выполнения? Сравнить _Page.Controls.Count_ –
Есть ли у вас другие элементы управления внутри элементов управления? Возможно, вам придется иметь логику, которая ищет содержащийся элемент управления, а затем повторяет передачу его контейнера. –
@SASS_Shooter Код уже делает это. Это рекурсивно. – LarsTech