2009-09-22 5 views
0

양식으로 연결되는 단추를 클릭하면 양식이 표시되지만 다른 양식이 나타납니다. 특정 조건이 참일 때 양식을 한 번만 호출합니다. 이것에 대한 이유는 무엇일까요? 모든 소스 코드를 보지 않고Windows 양식 자체가 중복됩니다.

if (selectedGame.NumOfPlayerShortForGame == 0) 
{ 
    bl.UpdateGamePlayerTurn(myGame.GameID, username); 
    GoToPlayingScreen(); 
} 
private void GoToPlayingScreen() 
{ 
    frmPlayingScreen playingScreen = new frmPlayingScreen(myGame, username); 
    this.Hide(); 
    playingScreen.Show(); 
} 
private void timerUpdateBindings_Tick(object sender, EventArgs e) 
{ 
     timerUpdateBindings.Stop(); 
     if (counter == 0) 
     { 
      UpdateBindings(); 
      //myGame = bl.GetUserGame(username); 
      if (myGame != null) 
      { 
       if (bl.GetRemainingPlayers(myGame.GameID) == 0) 
       { 
         counter++; 
         GoToPlayingScreen(); 
       } 
      }     
     } 
      timerUpdateBindings.Start(); 
} 
+3

몇 가지 코드를 게시해야합니다 .... 아래로 내려 가면서 행동을 표시하는 것이 바람직합니다. –

답변

1

은, 난 단지 추측 할 수있다. 그러나 "Forgotten Event Handler"라는 오래된 문제가있는 것 같습니다. 이벤트를 트리거하는 코드와 동일한 양식을 여는 일부 이벤트에는 이벤트 처리기가있어 양식 두 개가 열립니다.

우리는 더 유용한 도움을 제공 할 수 있도록 코드를 게시해야합니다 (가능하면 중요한 부분까지 정리해야합니다).

0

양식의 생성자에 중단 점 넣기 - 양식을 인스턴스화 할 위치를 단계별로 안내 할 수 있습니다.

확실하지 않은 질문 : GoToPlayingScreen()을 두 번 호출하고 있습니까? 첫 번째 IF 문으로 무엇을하는지 확신 할 수 없습니다 (메서드가 아닙니다).

0

내 생각 엔이 작은 덩어리가 문제

if (selectedGame.NumOfPlayerShortForGame == 0) 
{ 
    bl.UpdateGamePlayerTurn(myGame.GameID, username); 
    GoToPlayingScreen(); 
} 

입니다 것 초기화에 당신은 아마 selectedGame.NumOfPlayerShortForGame 어쩌면, 0과 동일하게 될 수 있도록 게임을 어떤 선수가 없기 때문에.

Charlie Salts가 제안했듯이 프로그램 실행 흐름을보기 위해 일부 중단 점을 설정해보십시오. GoToPlayingScreen()이 호출되는 모든 위치에 중단 점을 설정하십시오. 메서드가 호출 될 때 프로그램의 실행이 일시 중지됩니다.

실행이 한 번만 멈추지 만 계속 두 개의 게임 화면이 표시되면 중단 점을 playingScreen.Show()에 설정해보십시오.

그리고 어디에서 전화하는지 확인하십시오. 자동차 도구를 사용하여 카운터가 0인지 두 번 테스트되는지 확인하십시오. 나는 그것이 가능한 방법을 모르지만, 그것은 단지 또 다른 제안 일 뿐이다. 당신은 코드를 알고 있습니다, 때로는 마법 같은 방식으로 작동합니다.

+1

PEBKAC 문제가있는 경우에만 코드가 마술입니다. –

관련 문제