【问题标题】:C# - Change Label Text in opened Form from another ClassC# - 从另一个类更改打开表单中的标签文本
【发布时间】:2021-06-28 10:22:06
【问题描述】:

我正在使用具有语言支持的 WinForms 用 C# 编写程序,这意味着用户可以将程序语言从英语更改为德语。

现在我有 Form1Label1Class1

Class1 有一个名为 Translate() 的公共 void 方法,它应该翻译 Label1 的文本。 它通过在 Form1 加载事件中执行 Translate() 来做到这一点,但这对我不起作用。

我在Form1 中使用以下代码进行了尝试:

 private void Form1_Load(object sender, EventArgs e)
    {
        new Class1(Translate());
    }

Class1中的代码:

 public void Translate()
    {
        if (Language.Equals(1))
        {
            new Form1().Label1.Text = "English Translated Text";
        }
        else if(Language.Equals(2))
        {
            new Form1().Label1.Text = "German Translated Text";
        }
    }

它可能不起作用,因为它在新表单上更改了文本标签,而不是在已打开的表单上更改它,但我不知道如何使用我已有的代码使其工作。

【问题讨论】:

  • 首先,这不是正确的方法。但是,如果您希望它以这种方式进行更改,请将 form1 实例传递给 Translate 方法。您可以使用“this”来获取当前表单。在此处和其他地方阅读有关 WinForms 应用程序本地化的一些文本。您将更深入地了解它应该如何工作。如果您希望此解决方案起作用 - 请阅读有关传递表单实例的信息...
  • 为什么只使用您的Form1 来编写这些代码而不是使用单独的类?

标签: c# forms call invoke


【解决方案1】:

按照建议,通过this 传递表单:

private void Form1_Load(object sender, EventArgs e)
{
    Class1 c1 = new Class1();
    c1.Translate(this));
}

Translate():

public void Translate(Form1 f1)
{
    if (Language.Equals(1))
    {
        f1.Label1.Text = "English Translated Text";
    }
    else if(Language.Equals(2))
    {
        f1.Label1.Text = "German Translated Text";
    }
}

*然而,这假定Label1 可以在 Form1 上公开访问。默认情况下,控件不可公开访问。要解决此问题,请将 LabelModifiers 属性更改为 public。

但真正的解决方案在于实现Localization

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多