I have a method to reset some controls on my form. I'm able to get the method to work except for the ToolStripStatusLabel
named "tsStatusLabelInfo". This control is not passed to the resetForm()
method.
I believe that it is part of the StatusStrip control but I haven't figure out how to get access to the ToolStripStatusLabel
control to update the text.
private void resetButton_Click(object sender, EventArgs e)
{
Utilities.resetForm(this);
}
public static void resetForm(Control form)
{
foreach(Control c in GetOffSprings(form))
{
if (c.Name == "folderTextBox")
{
((TextBox)c).Clear();
}
else if (c.Name == "mfrListTextBox")
{
((RichTextBox)c).Clear();
}
else if (c.Name == "mfrListDataGridView")
{
((DataGridView)c).DataSource = null;
}
else if (c.Name == "onlyRadioButton")
{
((RadioButton)c).Checked = true;
}
else if (c.Name == "usRadioButton")
{
((RadioButton)c).Checked = true;
}
else if (c.Name == "otherYearsCheckedListBox")
{
((CheckedListBox)c).SetItemCheckState(0, CheckState.Unchecked);
((CheckedListBox)c).SetItemCheckState(1, CheckState.Unchecked);
}
else if (c.Name == "yearComboBox")
{
((ComboBox)c).Text = string.Empty;
}
else if (c.Name == "tsStatusLabelInfo")
{
//Control never pass
}
else if (c.Name == "statusStrip1")
{
// Exception:Object reference not set to an instance of an object
((StatusStrip)c).Controls["tsStatusLabelInfo"].Text = string.Empty;
}
}
}
//Loop through the control recursively getting all child controls
public static IEnumerable<Control> GetOffSprings(this Control @this)
{
foreach(Control child in @this.Controls)
{
yield return child;
//MessageBox.Show(child.Name);
foreach (var offspring in GetOffSprings(child))
{
yield return offspring;
}
}
}
It is because of this: https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.controls(v=vs.110).aspx
The
Controls
collection is not used on theToolStrip
andToolStripContainer
. You should useItems
instead: https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.items(v=vs.110).aspxThe items on the tool strip are not
Control
objects. They areToolStripItem
objects. Looping recursively through theControls
collection will not give you access to these items.