Main ()의 코드는 다른 양식을 여는 것에 따라 도달 할 수 있거나 도달 할 수 없습니다.

StackOverflow https://stackoverflow.com/questions/479368

  •  20-08-2019
  •  | 
  •  

문제

포켓 PC 앱이고 여기에 설명 된 심각한 문제가 있습니다. https://stackoverflow.com/questions/472598 . 솔루션을 찾는 동안 Main ()에서 실제로 꽤 어리석은 코드를 시도했습니다.

[MTAThread]
        static void Main()
        {
            Application.Run(new Tasks());
            Application.Exit();
        }

출구에서 중단 점을 설정합니다. 방금 응용 프로그램을 실행 한 다음 창을 닫으면 중단 점에 도달합니다. 응용 프로그램을 실행 한 다음 다른 창을 열면 다음과 같습니다.

private void questButton_Click(object sender, EventArgs e)
        {
            QuestionnairesWindow questWindow = new QuestionnairesWindow();
            questWindow.Show();
            this.Hide();
}

그런 다음 초기 창으로 돌아갑니다.

private void backButton_Click(object sender, EventArgs e)
        {
            Tasks tasksWindow = new Tasks();
            tasksWindow.Show();
            this.Close();
        }

그리고 처음과 같은 방식으로 처음으로 닫습니다. 설명이 복잡하다면 죄송합니다

편집 : 질문은 - 왜 다른 아이디어가 다르게 행동합니까?

도움이 되었습니까?

해결책

new Tasks() 안에 Main() 같은 대상이 아닙니다 Tasks tasksWindow = new Tasks();

당신은 2 개의 작업 객체를 얻었으므로 두 번째로 닫히면 먼저 여전히 존재하며 결코 죽지 않습니다. 당신은 통과해야합니다 QuestionnairesWindow 전류의 참조 Tasks.

추가로 할 수 있습니다 QuestionnairesWindow 건설자:

private Tasks tasks;

public QuestionnairesWindow(Tasks t)
{
  this.tasks = t;
}

사용 :

new QuestionnairesWindow(this).Show(); // where this = current `Tasks` created in `Main`

다른 팁

이 줄은 문제 인 것 같습니다.

Tasks tasksWindow = new Tasks();

코드를 올바르게 이해하면 backbutton_click에서 새로운 작업 양식의 인스턴스는 원래 숨겨진 것을 보여주지 않습니다. 이는 여전히 하나의 창이 열려 있지만 숨겨져 있기 때문에 응용 프로그램이 종료되지 않음을 의미합니다.

아마도 당신이하고 싶은 것은 설문지와 indow 양식에 대한 작업 양식 참조를 전달하는 것입니다.

당신이 가진 문제는 backbutton_click에서 당신이 새로운 작업 창의 인스턴스. 원래 작업 창이 여전히 실행 중이며 숨겨져 있습니다. 원래 과제 양식에 대한 참조를 설문지별로 전달하여 다시 표시하도록 선택할 수 있다고 생각합니다.

설문지에 공개/내부 메소드를 추가 해야하는 작업 양식을 설정하여 설문지가 열려야합니다. 이 메소드를 QuestButton_Click에서 호출합니다 이것 this.hide ()를 호출하기 전에 참조. 이 참조는 설문지와 indow의 개인 변수에 저장됩니다.

그런 다음 backbutton_click 에서이 개인 변수를 사용하여 .show () 메소드를 호출하여 부모 양식을 표시합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top