Измените labelText в пользовательском элементе управления за пределами собственного .cs

Я гуглил последние несколько дней, но безрезультатно.

У меня есть форма под названием MainForm, я разместил на ней четыре пользовательских элемента управления. Эти пользовательские элементы управления содержат метки и кнопки. Теперь я создал файл с именем Language.cs. В этом файле я хочу изменить языки для всех меток при нажатии кнопки в одном из моих пользовательских элементов управления. Когда я закодировал это в ucSettings.cs, я бы сделал это так:

this.label1.Text = res_man.GetString("label_text", cul);

Но это не работает, потому что мой Resourcemanager и моя информация о культуре находятся в другом файле. Так что я

  • MainForm содержит четыре пользовательских элемента управления.
  • Пользовательские элементы управления называются ucAnimalInfo, ucAnimalInput, ucSettings и ucMenuStrip.
  • У меня есть кнопка в ucSettings, которая должна изменить язык
  • Текст должен быть задан в файле Language.cs

Как видите, я меняю информацию о культуре, когда язык выбран в ComboBox:

private void Settings_Language_Cbox_SelectedIndexChanged(object sender, EventArgs e)
    {
        string SelectedIndex = Settings_Language_Cbox.SelectedItem.ToString();

        switch (SelectedIndex)
        {
            case "English(English)":
                ci = CultureInfo.CreateSpecificCulture("en-US");
                LanguageSelection = 5;
                break;
            case "Nederlands(Dutch)":
                ci = CultureInfo.CreateSpecificCulture("nl-NL");
                LanguageSelection = 6;
                break;
         }

Теперь я хотел бы сделать что-то вроде:

private void Settings_Save_Btn_Click(object sender, EventArgs e)
    {
       Language.Change();     
    }

Так что он вызывает мой метод Change в Language.cs и изменяет метки на правильный язык. Но теперь я не могу получить доступ ни к одной из меток в Language.cs, даже если они общедоступны, также мой файл Language.cs не может получить Resourcemanager и CultureInfo из ucSettings.cs. Итак, мой вопрос: как лучше всего справиться с этим? Я пытался использовать метод get/set, но это вообще не сработало, теперь я не уверен, потому ли это, что я испортил это или нет.

Редактировать: я приблизился, сделав это так: ucSettings.cs

private void Settings_Save_Btn_Click(object sender, EventArgs e)
    {
        Settings_Language_Cbox.SelectedIndex = LanguageSelection;
        BusinessClasses.Language language = new BusinessClasses.Language();
        language.setLanguage();
    }

Язык.cs:

    public class Language
{
    public MainForm mainform;
    public ucAnimalInfo animalinfo;
    public ucAnimalInput animalinput;
    public ucSettings settings;


    public void setLanguage()
    {
        mainform.Animal_Info_Tab.Info_Id_Text.Text = mainform.Settings_Tab.rs.GetString("Info_Save_Btn", mainform.Settings_Tab.ci);

    }

он по-прежнему выдает исключение NullReferenceException, поэтому на самом деле он не работает, но это самое близкое, что я получил до сих пор. rs и ci — это менеджер ресурсов и CultureInfo


person Black Lotus    schedule 13.05.2015    source источник


Ответы (1)


Ваш вопрос не очень ясен, вы говорите пользовательские контроллеры, а имеете в виду? пользовательское управление...

Поскольку вы новичок в Windows Mobile/Compact Framework, вам следует сначала начать с простого проекта, а затем постепенно переходить к желаемому.

Хорошим началом для локализации языковых ресурсов может быть http://www.codeproject.com/Articles/28234/Survival-guide-to-do-resource-localization-using-C. Используйте это, а затем расширьте с помощью простого пользовательского элемента управления и так далее.

Затем также прочитайте http://www.codeproject.com/Articles/16091/User-Interface-Localization-with-the-Compact-Frame об изменении языка «на лету».

Пожалуйста, просто предоставьте свою идею / потребность (я хочу разрешить это и показать это), если вам нужна дополнительная помощь.

person josef    schedule 14.05.2015
comment
Я обязательно прочитаю эти статьи. Спасибо, я также отредактировал свой пост, чтобы попытаться объяснить его немного лучше. - person Black Lotus; 15.05.2015