2013-05-31 3 views
0

Я уже искал другие вопросы для этого ответа (и так я получил, насколько я знаю), и все, кажется, работает, кроме конечного результата. Я не получаю никаких ошибок, но я не получаю желаемого ввода и не могу понять, почему.Изменение метки из другой формы

У меня есть две формы: Form1 и логин. На Form1 у меня есть метка под названием «label2», которая будет отображать текст, введенный из текстового поля при входе в систему при нажатии кнопки. Вот код, который я до сих пор:

Form1 Код:

public void SetTextForLabel(string myText) 
    { 
     this.label2.Text = myText; 
    } 

Войти Код:

private void button1_Click(object sender, EventArgs e) 
    { 
     Form1.userName = textBox1.Text; 
     Form1.password = textBox2.Text; 

     Form1 frm = new Form1(); 
     frm.SetTextForLabel(textBox1.Text); 

     this.Close(); 
    } 

Программа работает. Я нажимаю login на form1, он открывает форму входа. Я ввожу свое имя пользователя и пароль, и он передает входные данные моим переменным form1. Поскольку label2 в form1 не является общедоступным, я сделал публичный метод для использования в моей форме входа, которая изменит мой label2.Text, но это не так, и я не уверен, почему. Любая помощь будет оценена по достоинству.

+2

Вы инстанцировании новую копию form1 почему? – emd

+0

winforms или webforms? –

ответ

0

Это создает новый экземпляр Form1, но он не показан, и я подозреваю, что это не нужная вам ссылка.

Form1 frm = new Form1(); 
    frm.SetTextForLabel(textBox1.Text); 
0

Ваш код отлично подходит для меня. Просто напишите еще одну строку, чтобы показать форму1.

т.е.

frm.Show(); 

Я думаю, что он будет работать. :)

+0

Это работает, но я никогда не закрывал Form1 для начала. Поэтому, когда я использую frm.Show(), он выводит новый Form1 с обновленным вводом (и теперь работает мой код), но теперь у меня есть два Form1s. – user2422943

+0

ОК, поэтому вы хотите сказать одновременно, что обе формы открыты, и вы нажимаете на одну форму, что должно изменить текст ярлыка на другом. Пожалуйста, дайте мне знать мое понимание в отношении вашей проблемы, правильно ли это? –

+0

Если обе формы должны быть открытыми одновременно, и вам нужно, чтобы текст метки был обновлен при нажатии на другую форму. Просто создайте объект form1 вне события нажатия кнопки, и он должен быть статическим, а затем попытаться использовать. Он отлично работает для меня. Дайте мне знать, если вы все еще сталкиваетесь с проблемой. :) –

1

Судя по вашему описанию, я считаю, что форма Form1 открывает форму для входа, а в форме входа в систему находится button1, что, вероятно, является вашей кнопкой входа.

Если все это правильно, я думаю, что у вас неправильная логика.

ваша кнопка на Form1, которая открывается вид Логин должен сделать следующий

using(Login loginForm = new Login()) 
{ 
    if(DialogResult.OK == loginForm.ShowDialog()) 
    { 
     SetTextForLabel(loginForm.TextAccessorProperty); 
    } 
    else 
    { 
      MessageBox.Show("Invalid login"); 
    } 
} 

затем Войти с помощью форм нужно просто сделать,

//Login logic 
this.DialogResult = DialogResult.OK; 
// (no need for form.close()) 
Смежные вопросы