Как обновить ToolStripStatusLabel Text из метода, передавая все элементы управления в форме

У меня есть метод для сброса некоторых элементов управления в моей форме. Я могу заставить метод работать, кроме ToolStripStatusLabel с именем "tsStatusLabelInfo". Этот контроль не передается resetForm() метод.

Я считаю, что это является частью элемента управления StatusStrip, но я не выяснил, как получить доступ к ToolStripStatusLabel контроль, чтобы обновить текст.

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;
        }
    }
}

1 ответ

Решение

Это из-за этого: https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.controls(v=vs.110).aspx

Controls Коллекция не используется на ToolStrip а также ToolStripContainer, Вы должны использовать Items вместо этого: https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstrip.items(v=vs.110).aspx

Предметы на инструментальной полосе не являются Control объекты. Они есть ToolStripItem объекты. Циклически рекурсивно Controls коллекция не даст вам доступ к этим элементам.

Другие вопросы по тегам