Изменить язык WinForm с ресурсом - PullRequest
0 голосов
/ 17 января 2012

У меня есть следующий метод, который меняет язык winform.

    private void LoadLanguage(string lang)
    {
        foreach (Control c in this.Controls)
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(MainForm));
            resources.ApplyResources(c, c.Name, new CultureInfo(lang));
        }
    }

Я вызываю этот метод для метода Form_Load.Внутри формы у меня есть элемент управления вкладкой, но текстовое свойство tabPage не изменяется.С другой стороны, Label правильно изменены на соответствующий язык.Есть предложения?

1 Ответ

2 голосов
/ 18 января 2012

Удалите свой метод и попробуйте сделать это в файле Program.cs:

//Add this line
Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageString);
Application.Run(new Form());

Edit:

Главное, почему ваш код не работает, это то, что вы применяете язык для элементов управления формы. Это означает, что вы применяете элемент управления TabControl, но TabControl также имеет элементы управления (вкладки) «внутри». Поэтому вам нужно рекурсивно выполнять итерации по элементам управления, чтобы применить язык ко всем элементам управления и подэлементам управления. Попробуйте этот код:

private void LoadLanguage(string lang)
{
    ComponentResourceManager resources = new ComponentResourceManager(typeof(main));
    CultureInfo cultureInfo = new CultureInfo(lang);

    doRecursiveLoading(this, cultureInfo, resources);
}

private void doRecursiveLoading(Control parent, CultureInfo cultureInfo,  ComponentResourceManager resources)
{
    foreach (Control c in parent.Controls)
    {
        resources.ApplyResources(c, c.Name, cultureInfo);
        if (c.Controls.Count > 0)
            doRecursiveLoading(c, cultureInfo, resources);
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...