2014-10-01 4 views
3

최대한 최선의 방법을 설명하려고합니다.예기치 않게 작동하는 양식

저는 수많은 양식이있는 Windows 양식 응용 프로그램을 보유하고 있습니다. 첫 번째 양식 인 을 여는 것은 모달 형식이며, 기본 서식 프로그램 인 에 다양한 형식을 발행하는 명령 형식의 역할을합니다. 두 번째 양식도 기본적으로 열립니다. 응용 프로그램의 기본 양식은 입니다. 이 양식에는 예약 프로그램을 변경하는 메서드를 실행하는 여러 확인란이 있습니다. 이 양식은 모덜리스입니다. 이 선택된 각 상자가 동시에 실행되고 아래의 res 프로그램을 삭제, 변경 및 추가하는 방법을 수행합니다. 주어진 시간에 다양한 상자를 확인할 수 있습니다. 다음은 에 코드가 체크 박스를 처리 할 수 ​​있습니다 : 나는 위의 OWTMain 양식을 표시 다시 할 것이 시점에서

Private Sub frmOWTMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp 

    If e.KeyCode = Keys.Enter Then 
     Me.Hide() 'here i want to hide the OWTMain form 
     Call ckforPNR() 
     If Me.cbPricing.Checked Then 
      Call doPricing() 
      Me.cbPricing.Checked = false 
     End If 
     If Me.cbUdids.Checked Then 
      frmUdids.Show() 
      Me.cbUdids.Checked = False 
     End If 
     If Me.cbMod.Checked Then 
      Call doModUdids() 
     End If 
     If Me.cbFare.Checked Then 
      Call doFareSavings() 
      Me.cbFare.Checked = False 
     End If 
    End If 
    Me.show() 'This is the problem. This runs during method calls. All I'm 
     'looking to do is re display the OWTMain form. 
End Sub 

. 이것은 문제가있는 입니다. 보시다시피, 많은 양식이 으로 불리며, 다른 양식을 사용자에게 표시하는 것을 포함합니다. 내가 원래 다른 프로그램에 의해 필요한 정보를 toview 프로그램에 명령을 발급 할 수있는 최초의 열린 된 양식을 원하기 때문에 이러한 양식 중 하나를 원하지 않습니다. 나는이 방법 중 하나를 호출 할 때

Private Sub doPricing() 
    Dim myPrice As New Pricing 'a call to another class that handles pricing 
    If myPrice.getTQT = False Then 
     frmAddPricing.ShowDialog() 'showing new forms 
    Else 
     frmCurPricing.ShowDialog() 
    End If 
End Sub 

Private Sub doFareSavings() 
    Dim myPrice As New Pricing 
    If myPrice.checkForFS = False Then 
     frmFS.ShowDialog() 'showing new forms 
    End If 
    If myPrice.checkForFS = True Then 
     frmFSVerify.ShowDialog() 
    End If 
End Sub 

의 형식은 OWTMain가 호출 된 방법에서 다른 형태가 계속 실행되는 중간에있는 동안 보여줍니다 여기에

는 호출하는 방법의 몇 가지 예입니다. 나는 상단에있는 코드가 을 호출 순서대로 실행할 것으로 예상했지만, 그렇지는 않습니다. 모든 코드를 실행 한 후에 OWTMain 양식을 다시 표시하기 만하면됩니다. 나는 창문을 열거 나 닫을 때 많은 양의 코드를 작성하지 않고 이걸 알아낼 수 없었다.

이 문제에 도움을 주시면 매우 감사하겠습니다. 고맙습니다. John

+0

를 추가합니다. 'Show'를 호출하여 첫 ​​번째 양식을 모덜리스로 표시하고 'FormClosed' 이벤트를 처리합니다. 해당 이벤트 처리기에서 다음에 수행 할 작업을 결정하십시오. 다른 형태의 각각에 대해 그렇게하십시오. 마지막으로 FormClosed 이벤트가 발생하면 다시 원래 폼을 표시하십시오. – jmcilhinney

+0

첫 번째 블록을 보면 :'chkbox가 체크 된 경우 // 어떤 일을하거나 // 체크를 해제하십시오. '이것이 바로 버튼의 작동 방식입니다. 그대로, 그것은 [SRP]에 맞지 않습니다. (http://en.wikipedia.org/wiki/Single_responsibility_principle) – Plutonix

답변

0

그러면 모든 하위 양식이 닫혔는지 확인한 다음 기본 양식을 다시 표시합니다.

는 서브 형태의 부모로서 기본 양식을 사용할 수 있도록하기 위해 exitsing의 me.show() xyzForm.Show (나)에

Public Sub ReShowMainForm() 
    ' add all sub forms to this check 
    if frmFS.Visible = false andalso 
     frmUdids.Visible = false andalso 
     frmFSVerify.Visble = false then 
     Me.Show 
    End If 
End Sub 

변경 xyzForm.Show를 제거합니다.

각 서브 형태로 FormClosed 이벤트를 처리하고 당신이 그 이벤트 핸들러에서 해당 코드의 대부분을 제거해야한다고 나에게 보인다 다음 코드

DirectCast(me.parent, frmOWTMain).ReShowMainForm() 
+0

나는이 라인에서 당신이 무엇을 의미하는지 이해하지 못합니다 : "xyzForm.Show를 xyzForm (me)로 변경하십시오. 주 양식을 하위 양식의 상위 항목으로 사용할 수있게하려면 xyzForm이 기본 양식입니까, 아니면 표시해야하는 다른 양식에도 모두 적용됩니까? 여러 가지 방법으로 상자를 검사하는 순서대로 약 10 개의 개별 메서드가 실행됩니다 양식.고마워요, 정말 고마워요. John – user2774415

+0

죄송합니다. 나는 중대한 세부 사항을 놓쳤다. 모든 ShowDialog 호출에 매개 변수 (Me)를 추가합니다. 예 : frmAddPricing.ShowDialog (Me) – schudel

+0

schudel, 대단히 감사합니다. 이것은 내가 취한 방향이지만 각 양식의 가시성을 개별적으로 확인하는 대신 열려있는 모든 양식 (시작 양식 제외)을 반복하고 각 양식의 표시 속성을 확인했습니다. 그런 다음 주 양식을 열었습니다. 다시 고마워. 귀하의 코드는 일주일에 한 번씩 해결책을 찾았습니다. 많은 감사합니다. – user2774415

관련 문제