2009-07-03 11 views
1

나는 내 Windows 응용 프로그램에서 두 가지 양식을 만들었습니다.모달 대화 상자

하나의 양식은 양식으로 작동하고 다른 양식은 모달 대화 상자로 작동합니다.

양식 대화 상자에는 버튼과 텍스트 상자 하나가 있습니다. 이 버튼을 클릭하면 MODAL DIALOGBOX가 표시됩니다. 이 대화 상자에는 하나의 텍스트 상자와 두 개의 단추 (Ok 및 Cancel)도 있습니다.

이제이 대화 상자가 표시되면 대화 상자의 텍스트 상자에 Form1의 입력란에 입력 된 값이 포함되어야합니다.

이 작업을 수행하기 위해 다음 코드를 사용했습니다. Form1에 코딩 : 코드 모달 대화 상자 OK 버튼에

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.ShowDialog(); 
    objFnC.txtUserName.Text = UserName; 
} 

: OK (확인) 버튼을 클릭하면

버튼을 취소 있습니다 만 사용할 수 있습니다.

는 코딩 :

private void btnOk_Click(object sender, EventArgs e) 
{ 
    btnCancel.Enabled=true; 
} 
private void btnCancel_Click(object sender,EventArgs e) 
{ 
    this.Close(); 
} 

내가 직면하고 문제는 모달 대화 상자의 텍스트 상자에 표시되지 않습니다 사용자 이름 텍스트 상자에 사용자가 입력 한 값입니다. 대신 텍스트 상자를 비어있는 것으로 표시합니다.

사용자가 텍스트 상자에이 모달 대화 상자에 입력 한 값을 가져 오려면 어떻게해야합니까?

누구나 원하는 작업을 수행 할 수 있습니까?

미리 감사드립니다.

답변

2

변경 :

objFnC.ShowDialog(); 
objFnC.txtUserName.Text = UserName 

사람 : 내가 원하는대로 지금 작동하고 프롬프트에 대한

objFnC.txtUserName.Text = UserName 
objFnC.ShowDialog(); 
6

문제는 사용자 이름을 설정하기 전에 대화 상자를 표시하고 있다는 것입니다.

//this shows your dialog 
objFnC.ShowDialog(); 
//this won't happen until the dialog is closed 
objFnC.txtUserName.Text = UserName; 

대화 상자가 모달이므로 대화 상자가 닫힐 때까지 다음 줄로 이동하지 않습니다. 당신은 그 라인들을 돌리고 싶을 것이고 괜찮을 것입니다.

//do this first 
objFnC.txtUserName.Text = UserName; 
//then show your dialog 
objFnC.ShowDialog(); 

텍스트 상자를 공개적으로 표시하는 것은 실제로 좋은 아이디어가 아닙니다. 소비자가 대화 상자에 대한 구현 지식을 갖기를 원하지는 않습니다.

매개 변수를 폼 생성자에 추가 한 다음 텍스트 상자 텍스트를 그 내부에서 설정하는 것이 좋습니다. 그런 다음 다음을 수행 할 수 있습니다 :

//get the username 
string userName = txtUserName.Text; 
//create a new form passing in the username 
frmFnC objFnC = new frmFnC(userName); 
//display the form 
objFnC.ShowDialog(); 

그런 식으로, 소비자가 frmFnC 당신이 사용자 이름을 표시하는 방법의 내부 동작을 자유롭게 변경할 수있어 의미 txtUserName라는 이름의 텍스트 상자를 가지고에 의존하지 않습니다. 예를 들어 레이블로 변경하면 소비자 코드가 손상되지 않습니다. 소비자는 생성자에 사용자 이름을 전달해야한다는 것을 알아야합니다.모달 폼의 텍스트 상자의 내용, 즉이 코드를 폼에 추가 설정할 수 (얻을)하기 위해

+0

감사합니다! – sheetal

1

: 다른 형태로, 그리고

public string UserName 
{ 
    get { return txtUserName.Text; } 
    set { txtUserName.Text = value; } 
} 

, 당신은 설정할 수 있습니다 사용자 이름 :

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
objFnC.ShowDialog(); 

또한 모달 대화 상자의 확인 및 취소 버튼 사이의 관계에 대해 질문 할 필요가 있습니다. 취소 단추를 사용하려면 먼저 사용자가 확인을 클릭해야하며 양식을 실제로 닫으려면 취소를 클릭해야합니다. 그때이 버튼의 클릭 이벤트에 대한 이벤트 처리기가없는 것이 좋습니다, 대신 자신의 DialogResult 속성의 적절한 값을 설정 한 것

모달 폼의 AcceptButtonCancelButton 속성을 설정합니다. 그런 식으로 당신은 대화 상자가 닫힌 방법을 확인할 수 있습니다

frmFnC objFnC = new frmFnC(); 
objFnC.UserName = txtUserName.Text; 
if (objFnC.ShowDialog() == DialogResult.OK) 
{ 
    // the user clicked the OK button 
} 
else 
{ 
    // the user clicked the Cancel button 
} 
+0

귀하의 메시지를 보내 주셔서 감사합니다. – sheetal

1

이 대화에서 텍스트 필드를 설정 ShowDialog를 호출하기 전에 :

private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; 
    objFnC.ShowDialog(); 
} 
+0

고마워 지금 내가 원하는대로 일하고있다! – sheetal

1

당신은 텍스트와 ShowDialog를 설정을 교체해야합니다

public string UserName; 
private void btnFn_Click(object sender, EventArgs e) 
{ 
    UserName = txtUserName.Text; 
    frmFnC objFnC = new frmFnC(); 
    objFnC.txtUserName.Text = UserName; // SET THE DATA BEFORE SHOWING THE DIALOG 
    objFnC.ShowDialog(); 
} 

또는 나중에 대화 상자를 강제로 다시 그립니다.