Изменение текста метки в другой форме на С#?
У меня есть ярлык LabelX1. Это по форме2. В form1 у меня есть кнопка. Я хочу, чтобы текст кнопки был перенесен на другую метку формы. Я пробовал
form2 frm2 = new form2();
frm2.labelX1.Text = this.button1.text;
Но это не сработает. Есть ли простой и прямой способ сделать это?
Ответы
Ответ 1
Вам нужно выставить ярлык или его свойство.
В форме 2:
public string LabelText
{
get
{
return this.labelX1.Text;
}
set
{
this.labelX1.Text = value;
}
}
Затем вы можете сделать:
form2 frm2 = new form2();
frm2.LabelText = this.button1.text;
Ответ 2
Вы можете изменить конструктор Form2 следующим образом:
public Form2(string labelText)
{
InitializeComponent();
this.labelX1.Text = labelText;
}
затем создайте Form2, проходящую в тексте:
Form2 frm2 = new Form2(this.button1.text);
Ответ 3
внутри form2 напишите это
public void ChangeLabel(string s)
{
labelX1.Text = s;
}
тогда, когда вы создаете форму 2, сделайте это
form2 frm2 = new form2();
frm2.ChangeLabel(this.button1.text);
Ответ 4
Или вы можете сделать это →
((Label)frm2.Controls["labelX1"]).Text = "test";
Ответ 5
Есть ли простой, прямой способ сделать это?
Самый простой способ - сделать labelX1 общедоступным элементом формы2. Проблема, с которой вы сталкиваетесь, заключается в том, что из Form1 код form2.labelX1 не отображается. В дизайнере form2 вы можете перейти к свойствам labelX1 и установить видимость для public/internal.
Лучшим подходом было бы выставить labelX1.Text как свойство, которое может быть установлено в коде вне класса.
Ответ 6
Вы можете мне labelX1 публично, и он будет работать, но есть лучший способ сделать это
http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms
Ответ 7
Я изменил свойство родительского окна на следующий код:
this.MdiParent.Controls["label1"].Text = "test";
Ответ 8
form2 frm2 = new form2();
((Label)frm2.Controls["labelX1"]).Text=button1.Text;
frm2.Show();
Ответ 9
Если вам нужно получить доступ к форме2 из другого места вашего кода (например, нажмите кнопку, например), вы не сможете увидеть экземпляр создаваемой формы. Чтобы решить это, я создаю публичный экземпляр, чтобы содержать ссылку на него, например:
public form2 form2_pub;
Затем после его создания вы назначаете новый экземпляр public:
form2 frm2 = new form2();
frm2.Show();
form2_pub = frm2
Теперь вы можете ссылаться на form2_pub во всех ваших подпрограммах.
Работает для меня как минимум.
Помните, что в вашем сеттере вы можете запускать любой другой код, который вы хотите.
Например, я использую следующее, чтобы показать, что я хочу в другой форме, просто установив show_scanning в true:
public bool show_scanning //turns on the scanning screen
{
set
{
scanning_pnl.Visible = true;
notReady_pnl.Visible = false;
timer1.Enabled = true;
}
}
Ответ 10
У вас есть исключение? Вы можете сделать публичное свойство на form2, с установщиком, чтобы установить текст на ярлыке, или сделать модификатор доступа labex1 общедоступным и установить его напрямую. Он должен работать.