在Windows窗体中循环所有控件,MenuStrip项,StatusStrip项

时间:2018-09-18 10:46:56

标签: c# visual-studio winforms visual-c++ localization

我正在本地化界面。我已经翻译了各种控件。现在,当我选择语言时,我叫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#中使用示例。

0 个答案:

没有答案