#c# #forms #call #invoke
#c# #формы #позвоните #вызвать
Вопрос:
Я кодирую программу на C # с использованием WinForms, которая имеет языковую поддержку, что означает, что пользователь может, например, изменить язык программы с английского на немецкий.
Теперь у меня есть Form1
с Label1
и а Class1
.
Class1
имеет открытый метод void с именем Translate()
, и он должен перевести текст Label1
. Он делает это, выполняя Translate()
при Form1
событии загрузки, но это не работает для меня.
Я попробовал это со следующим кодом в 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";
}
}
Вероятно, это не работает, поскольку оно изменяет текстовую метку в новой форме вместо того, чтобы изменять ее в уже открытой форме, но я не знаю, как заставить ее работать, используя код, который у меня уже есть.
Комментарии:
1. Во-первых, это неправильный подход. Но, если вы хотите, чтобы это изменилось таким образом, передайте экземпляр form1 методу Translate . Вы можете использовать «это», чтобы получить текущую форму. Прочитайте здесь и в других местах текст, касающийся локализации в приложениях WinForms. Вы получите больше информации о том, как это должно работать. Если вы хотите, чтобы это решение работало — прочитайте о передаче экземпляра формы…
2. Зачем просто использовать ваш
Form1
для написания этих кодов вместо использования отдельного класса?
Ответ №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. Элементы управления по умолчанию недоступны для общественности. Чтобы исправить это, измените Modifiers
свойство Label
на public .
Но реальное решение заключается в реализации локализации.