2012-09-04 2 views
1

간단한 C# 응용 프로그램을 만들려고합니다. (C#에서 첫 번째 시도는 친절합니다.) "인증 코드"를 캡처하는 텍스트 상자가있는 양식을 작성한 다음 유효성을 검사 한 다음 웹 클라이언트가이 인증 코드를 요청에 전달하는 XML 파일을 가져옵니다. 전송 된 데이터는 e.c.t로 파싱됩니다.C# 두 번째 형식은 초기화 후 닫습니다.

내가하고 싶은 것은 xml이 돌아 왔고 그것이 유효하다는 것을 확인하기 위해 내 수표를 다 만들었습니다. 첫 번째 폼을 닫고 두 번째 폼을로드하려는 경우 xml 데이터를 예쁜 형식으로 표시하는 데 필요한 폼 구성 요소를 프로그래밍 방식으로 추가합니다.

제 문제는 두 번째 양식을 열어 두지 못하는 것입니다 (틀린 방식으로 두 번째 양식을 의심 할 여지없이). 다음은 내가 가지고있는 것입니다.

// close current form 
this.Close(); 

//open new form 
xmlViewForm xmlView = new xmlViewForm(); 
xmlView.Show(); 

나는 지금 실수를 저지른 것으로 확신합니다. 그러나 완전성을 위해 분명한 사실을 밝히기 위해서는 첫 번째 양식을 닫고 두 번째 양식을 연 다음 즉시 프로그램이 종료됩니다 (두 번째 양식은 분명히 두 번째 양식으로 깜박입니다).

나는 몇 가지를 시도했지만 그들 중 누구도 (Application.Run(new xmlViewForm());를 사용하여 포함하는 대신 클래스를 인스턴스화하고 show() 방법을 사용하여 작동하지. 분명히 당신은 작동하지 않는 알고, 내가 이해 해달라고하지만 지금은 너무 할 C#을도 원격으로 충분 :) 어떤 도움을 이유.

감사를 해결하기

답변

5

가장 먼저 떠오른 점은 Application.Run(new MyForm()) 또는 비슷한 것을 호출하여 연 양식을 닫는 것입니다. 이 양식은 특별한 의미가 있습니다. 그것은 응용 프로그램의 "기본 형식"이며 닫히면 응용 프로그램에 열려있는 열려있는 프로그램의 수와 상관없이 전체 프로그램을 닫으려는 응용 프로그램에 신호를 보냅니다.

두 가지 가능한 수정 방법이 있습니다. 첫째, 가장 쉬운 방법은 단순히 Close()를 호출하는 대신 표시하지 않으려는 양식을 Hide()하는 것입니다. 보이지 않지만 실행 중이므로 응용 프로그램이 닫히지 않습니다.

두 번째 방법은 보려는 기본 폼을 지정하여 만든 "기본 컨텍스트"대신 실행해야하는 사용자 지정 "응용 프로그램 컨텍스트"를 정의하는 것입니다. 이렇게하려면 System.Windows.Forms.ApplicationContext에서 사용자 지정 클래스를 파생시킵니다. 이 컨텍스트를 지정하면이 양식을 사용하여 기본 폼이 닫히는 것 외의 다른 것을 기반으로 응용 프로그램의 종료를 제어 할 수 있습니다. 두 개의 "기본 양식"을 시작하고 두 가지가 여전히 활성 상태인지 추적하는 예제 코드는 the MSDN page for the class에서 찾을 수 있습니다.기본 폼에 대한 핸들러로드 및 닫기를 지정하고 기본 폼이 인스턴스화 될 때 하위 폼에 전달하여 "열린"폼 수를 유지하고 해당 숫자가있을 때 전체 응용 프로그램을 닫음으로써 비슷한 작업을 수행 할 수 있습니다 제로. this.Close() 전에 childForm.Show()을 호출하여 주 양식을 닫기 전에 하위 양식이로드되는지 확인하십시오.

+0

고마워 키이스, 그게 내가 필요한거야. 나는 Sean에게 당신이 그것을 닫을 수없는 이유를 물어봤을 뿐이었다. (현재의 응용 프로그램은 잘 감추고 작동하지만, 더 큰 응용 프로그램은 메인 윈도우를 닫아야 리소스 사용을 제한 할 수 있다고 상상할 수있다. 빈 폼을 주 컨트롤러로 사용하고 즉시 숨김). 당신의 설명은 완벽합니다. 왜 고침이 작동하는지 알지 못하고 무언가를 고치는 법을 아는 것이 싫어서, 나에게 아무런 도움이되지 않습니다. – Lee

+0

'기본 양식'에는 특별한 것이 없습니다. 그것은 보통 엔트리 포인트 메쏘드의 마지막 라인 일 것입니다. Application.Run (Form) 호출 뒤에 추가 코드를 실행하면 해당 양식을 닫으면 사용자가 전체 프로그램을 닫으려는 응용 프로그램에 신호를 보내는 것이 오도하는 것입니다. – Mufaka

+0

OP를 포함한 6 명이 내가 옳다고 생각합니다. 내 대답에 문제가있는 사람은 너 밖에 없어. 'Application.Run()'을 여러 번 호출하거나 Run()을 한 번 호출 한 후에 정리 코드 이외의 다른 것을 호출하는 것은 잘못된 코드입니다. OP가 사용자의 권장 사항을 따르지 않는다고 가정하면 기본 폼이 닫히고 Windows에 메시지 펌프가 종료되고 프로그램이 Run() 호출 이후 계속 진행되며 대개 App.Run과 같은 기본 메소드에서 즉시 반환됩니다()는 마지막 줄입니다. 당신의 대답은 틀렸어. 그것을 전문으로 다루고 보복 대신에 배웁니다. – KeithS

4

당신은 하지는 기본 폼을 닫은 후 두 번째 양식을 열 수 있습니다.

는이 작업을 수행합니다 : 그것은 부모 폼 때문에

//open new form 
xmlViewForm xmlView = new xmlViewForm(); 
xmlView.Show(); 

// hide current form 
this.Hide(); 

홈페이지 양식을 닫을 수 없습니다. 기본 양식을 닫으면 하위 양식이 표시되지 않습니다.

또는 그런 다음 당신은 쉽게 로딩시 먼저 다른 형태를 호출하고 당신으로하십시오 닫을 ​​수 있습니다 Program.cs 파일

Application.Run(new XmlViewForm()); 

을 편집하여 기본 폼에 xmlViewForm을 변경

private void XmlViewForm_Load(o, s) 
{ 
    // hide current form, and this will remain hidden until the other form is done with it's work 
    this.Hide(); 

    //open the other form 
    TheOtherForm _theOtherForm = new TheOtherForm(); 
    _theOtherForm.Show(); 

} 

private void TheOtherForm_Closed(o, s) 
{ 
    // show current form 
    this.Show; 

} 
+0

'Hide()'가 닫히지 않고 양식을 숨기는 것입니다. –

+0

왜 주 양식을 닫고 싶습니까? 그것은 부모 형태입니다. @ RandolfRincón-Fadul –

+0

OP는 "첫 번째 양식을 닫고 싶습니다."라고 말합니다. 이제 편집을 보았습니다. +1 –

관련 문제