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