Зациклить все элементы управления, элементы MenuStrip, элементы StatusStrip в форме Windows - PullRequest
0 голосов
/ 18 сентября 2018

Я локализую свой интерфейс.Я перевел различный контроль.Теперь, когда я выбираю язык, я вызываю мой changeLanguage() метод

void Form1::changeLanguage(LanguageIndex languageIndex)
{
  String^ language = getLanguageString(languageIndex); // returns "en", "it", ...
  ComponentResourceManager^ resourceManger = gcnew ComponentResourceManager(this->GetType());
  CultureInfo^ cultureInfo = gcnew CultureInfo(language);

  applyResourceToAllControls(resourceManger, cultureInfo, this->Controls);

  languageIndex_ = languageIndex;
}

Вот метод applyResourceToAllControls()

void Form1::applyResourceToAllControls(ComponentResourceManager^ resourceManger, 
                                       CultureInfo^ cultureInfo, 
                                       Windows::Forms::Control::ControlCollection^ controls)
{  
  for(int i = 0; i < controls->Count; i++)
  {
    resourceManger->ApplyResources(controls[i], controls[i]->Name, cultureInfo);
    applyResourceToAllControls(resourceManger, cultureInfo, controls[i]->Controls);
  }
}

Этот подход работает для нескольких элементов управления, но не работает дляменю / подменю и StatusStrip;цикл фактически не перемещается по дочерним элементам этих элементов управления.Я полагаю, это связано с тем фактом, что «потомки» - это Предметы, а не фактические потомки / элементы управления.

Любая идея, как я могу зациклить все (действительно все!) Элементы управления?

Я могусоздайте пользовательские методы для навигации по StatuStrip и MenuStrip (будет всего два метода), но я полагаю, что существует способ сделать все из одного цикла.

Как вы можете догадаться, я работаю в C ++.Но нормально иметь примеры в C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...