2013-05-31 2 views
0

이미이 답변에 대한 다른 질문을 검색했으며 최종 결과를 제외하고 모든 것이 작동하는 것처럼 보입니다. 오류는 없지만 원하는 입력을 얻지 못하고 이유를 파악할 수 없습니다.다른 서식에서 레이블 변경

Form1과 login의 두 가지 형식이 있습니다. 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(); 
    } 

이 프로그램은 작동 여기에 지금까지 가지고있는 코드입니다. form1에서 login을 클릭하면 로그인 폼이 열립니다. 내 사용자 이름과 암호를 입력하면 양식 1 변수에 입력이 전달됩니다. form1의 label2는 공개되지 않았기 때문에 로그인 양식에서 내 label2.Text를 변경할 public 메서드를 사용했습니다.하지만 그렇지 않습니다. 이유가 확실하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

+2

당신은 Form1에 이유의 새 복사본을 인스턴스화하는거야? – emd

+0

winforms 또는 webforms? –

답변

0

이렇게하면 Form1의 새 인스턴스가 만들어 지지만 보이지는 않습니다.이 인스턴스는 필요한 참조가 아닌 것 같습니다.

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

코드가 정상적으로 작동하므로 form1을 표시하는 데 한 줄 더 작성하십시오.

frm.Show(); 

나는 그것이 작동 것이라 생각합니다. :)

+0

이것은 작동하지만 처음에는 Form1을 닫지 않았습니다. 그래서 frm.Show()를 사용하면 업데이트 된 입력 (이제는 내 코드가 작동 함)으로 새 Form1이 표시되지만 두 개의 Form1이 열립니다. – user2422943

+0

오케이, 그러니까 동시에 양식이 열려 있고 한 양식을 클릭하면 다른 양식의 레이블 텍스트가 변경되어야한다고 말하는 것입니다. 귀하의 문제와 관련하여 제 이해를 알려 주시기 바랍니다, 그것이 맞습니까? –

+0

두 양식이 동시에 열려 있어야하며 다른 양식을 클릭 할 때 레이블 텍스트를 업데이트해야합니다. 버튼 클릭 이벤트 외부에 form1 객체를 만들면 정적이어야하고 사용을 시도해야합니다. 그것은 나를 위해 잘 작동합니다. 아직도 문제가 있다면 알려주세요. :) –

1

설명에 따르면, Form1은 로그인 양식을 열고 로그인 양식에 로그인 버튼 인 button1이 있다고 생각합니다.

이것이 모두 올바른 경우 논리가 잘못되었다고 생각합니다.

로그인 양식이 하나의 단지해야 할 양식 버튼 로그인을 다음

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

을해야 열립니다 Form1에 당신의 버튼

,

//Login logic 
this.DialogResult = DialogResult.OK; 
// (no need for form.close())