2015-04-23 5 views
0

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

Я считаю, что это часть элемента управления 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; 
     } 
    } 
} 

ответ

0

Именно из-за этого: 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 не дадут вам доступ к этим элементам.

+0

Это изменило код на ((StatusStrip) c) .Items ["tsStatusLabelInfo"]. Text = string.Empty; Спасибо за помощь! – Joaquin