2012-12-10 3 views
0

현재 C# Visual Studio Windows 응용 프로그램에서 작업 중입니다. 하나의 양식 (Form1)에서 텍스트 상자 값을 가져 와서 다음 양식 (Form2)에서 사용하기 위해 변수에 저장하는 데 문제가 있습니다. 값을 즉시 표시하고 싶지 않기 때문에 배경에 값을 저장할 수 있고 나중에 사용할 수있는 방법이 필요합니다. 내가 어떻게 해?나중에 다른 폼으로 전달하기 전에 값을 저장합니다.

나는이 방법을 시도했지만 효과가 없지만 누구나 그 이유를 말할 수 있습니까? form2의 반환 값은 비어 있습니다.

Login.cs (로그인 페이지)

public string uname; 

    private void LoginButton_Click(object sender, EventArgs e) 
    { 
     string userName = this.LoginUsernameTextBox.Text; 
     uname = userName; 
    } 

Form2.cs

private void CheckLoginUsername_Click(object sender, EventArgs e) 
    { 
    Login login = new Login(); 
    MessageBox.Show("The value of uname is:" + login.uname); 
    } 

enter image description here

+0

시도한 코드에 약간의 코드를 표시해주십시오. –

+2

'하지만 그것을 시도했을 때, 그 값은 즉시 다음 양식을 전달하지 않은 채 길을 잃은 것 같습니다. ' 값을 비공개 멤버에 쉽게 저장하고 언제든지 컨트롤에 표시 할 수 있습니다. –

+0

두 번째 폼에 속성을 만들고 두 번째 폼을 표시하기 전에 첫 번째 폼의 값을 작성하십시오. – Vlad

답변

2

문제가 Form2의 동일한 인스턴스를 참조하지 않은 것입니다 사용자가 상호 작용하는 Login, 당신은 새로운 인스턴스를 생성하고 (결코 그것을 사용자에게 보여주지 못한다), 그로부터 가치를 얻는다.

이러한 양식 간의 상호 작용 정도는 표시하지 않았습니다 (있는 경우 공정한 비트가 누락 됨).

그것은 아마 다음과 비슷한 모습이 될 것입니다 Form2의에서

:

private void Form1_Load(object sender, EventArgs e) 
{ 
    Login loginForm = new Login(); 

    loginForm.ShowDialog(); 

    string username = loginForm.UserName; 
} 

그런 다음 로그인 폼이 뭔가를해야한다 : 당신은 설정 할 수 있습니다

public string UserName { get; private set; } 

내부적으로 (양식이 제출/폐쇄 될 때) 값을 가져 와서 외부에서 읽습니다.

필드를 공개하는 것이 바람직하지 않습니다. 대신에 속성을 사용하는 것이 바람직합니다 (다른 것들 중에서도 내가 여기서 한 것을 할 수 있고 setter를 private로 제한 할 수 있습니다).

+0

더 많은 예제가 있습니까? 내가 코드를 얻을 수 없기 때문에 Servy는 일할 수있다. – Derek

+0

@Derek "작동하지 않는다"는 것은 도움이되지 않는다. 무슨 일이 일어나지 않는가? 또한이 두 형식 간의 현재 상호 작용은 무엇입니까 (있는 경우)? – Servy

관련 문제