C# - 从另一个 Class 更改打开的表单中的标签文本

C# - Change Label Text in opened Form from another Class

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

现在我有 Form1Label1 以及 Class1

Class1 有一个名为 Translate() 的 public 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";
        }
    }

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

按照建议,通过 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 上 public 访问。默认情况下 public 无法访问控件。要解决此问题,请将 LabelModifiers 属性 更改为 public。

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