2017-05-19 3 views
0

좋은 하루 녀석들, 이전 질문을 확인했습니다. 그렇습니다.하지만 실제로 문제를 해결하지 못했습니다.두 양식을 실행하는 C# 창 양식

두 가지 양식이있는 응용 프로그램을 작성 중이며 mainForm 및 Password 양식이 있습니다.

두 개의 코드를 스캔하여 일치하는 양식입니다. 첫 번째 코드를 스캔 한 다음 두 번째 코드를 스캔합니다. 일치하면 일치하는 것을 나타내는 녹색 불이 팝업됩니다. 코드가 일치하지 않으면 빨간색 표시등과 암호 양식을 동시에 팝업하고 관리자가 스캔 한 내용을 확인하기 위해 양식 텍스트 상자를 ReadOnly에 잠급니다.

이 모든 작업을 수행하고 있습니다.

감독자가 암호를 입력 할 때 사용자가 스캔을 계속할 수 있도록 양식을 다시 표시해야하는 경우 문제가 발생합니다. 그러나 문제는 그것이 새로운 형태를 열 때입니다, 잠긴 뒤에있는 것이 사라지지 않는 것입니다. 양식을 다시 설정하려고했지만 작동하지 않습니다. 이걸 도와주세요.

//object references of the Main Form 
MainForm fm=new MainForm(); 

if ((txtPassword.Text =="This" 
{ 

    fm.BringToFront(); 

    //Reset the form to a normal state 
    fm.lblResult.Visible = false; 
    fm.txtResult.Visible = false; 
    fm.chkMtn.Checked = false; 
    fm.chkVodacom.Checked = false; 

    //Clear the textBox of the form 
    fm.txtMainFormScan1.Text=""; 
    fm.txtMainFormScan2.Text=""; 

    set the focus on the fist Scan 
    fm.txtFirstScan.Focus(); 
} 

The code above does not work. now i am using the one below. 

if ((txtPassword.Text =="ThisPassword") 
{ 
    lblInstructPassword.Text = "Password correct"; 
    txtPassword.Text = ""; 
    fm.ControlBox = true; 
    //fm.Activate(); 
    this.Hide(); //This Close the Password form 
    fm.Show(); 
    fm.chkMtn.Checked = true; 
} 

내가 //fm.ShowDialog를 사용하는 경우에도, 내가 이길 수 없다. 또한 뮤텍스를 사용하여 응용 프로그램 인스턴스 하나만 실행할 수 있도록했습니다. 결과는 0입니다. 사전에 도움을 주셔서 감사합니다.

+0

은 당신이 당신의 주요의 방법 "ResetForm()"를 쓸 수 없습니다 양식을 작성하고 암호 양식에서 호출하십시오. – Aboc

+0

이 응용 프로그램이 매우 커질 경우 winforms 대신 MVVM 패턴을 사용하여 WPF를 사용하는 것이 좋습니다. 더 많은 전력 및 유연성을 제공합니다. –

+0

큰 문제는 아니지만, 주요 기능은 수동으로 스캔 할 때 사용자가 수행하는 오류를 최소화하기 위해 하나의 문제 만 해결하는 것입니다. –

답변

0

.Net이 당신을 위해해야 ​​할 많은 작업을 수행하고 있습니다.

모든 다른 것으로 변경할 자세한 내용은, 당신의 진짜 문제는 이것이다 :

  • 당신은 두 값을 비교하는 작업 형태를 갖는다.
  • 비교 결과가 거짓이면 모달 창이 나타나 암호를 묻는 메시지가 나타납니다.
  • 암호가 맞으면 다시 편집 할 수있는 첫 번째 양식과 사라질 암호 양식이 필요합니다.

ShowDialog()을 사용하여 올바른 경로에 있었으므로 대화 상자를 표시하는 명령이 실행되지 않습니다. 상위 양식이 아닌 해당 대화 상자 양식의 일부가 되려면 암호 논리가 필요합니다. 이렇게하면 부모 양식에 DialogResultenum 값을 반환 할 수 있으며 (아무런 가치가있는 경우) 불필요한 Focus() 던지기를 유도 할 수 있습니다.

은 사라지고 이렇게하면 다시하기 위해 호출하는 형태를 원하는 경우에, this.Hide()에서 양식의 ShowDialog() 전화로 통화를 감싸고 this.Show()

+0

예, 첫 번째 양식이 표시되면 this.showDialog()를 사용하여 암호 양식 Hide. 하지만 내가 보여줄 첫 번째 양식을 닫을 때. 불일치가있을 때 오류가있는 양식을 보게 될 것입니다. –

+0

두 번째 양식이 수정 된 입력을 허용합니까? – CDove

+0

예, 두 번째 양식은 모든 작업을 수행합니다. –

관련 문제