Подтвердить что ты не робот

Изменение текста метки в другой форме на С#?

У меня есть ярлык LabelX1. Это по форме2. В form1 у меня есть кнопка. Я хочу, чтобы текст кнопки был перенесен на другую метку формы. Я пробовал

form2 frm2 = new form2();
frm2.labelX1.Text = this.button1.text;

Но это не сработает. Есть ли простой и прямой способ сделать это?

4b9b3361

Ответ 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 как свойство, которое может быть установлено в коде вне класса.

Ответ 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 общедоступным и установить его напрямую. Он должен работать.