2013-08-20 4 views
-2

궁금합니다. Microsoft Word, Excel 등의 응용 프로그램은 내부에 빈 양식이있는 새 양식을 어떻게 작성합니까? 다른 양식을 새로 만드는 것과 같습니다. 버튼을 클릭 할 때마다 새 양식을 만듭니다.

나는 코드를 시도 :

this.Hide(); 

Form2 secondaryForm = new Form2(); 
secondaryForm.ShowDialog(); 

this.Close(); 

위의 코드는 새 양식 (새 양식)를 작성하는 것입니다,하지만 제한된 시간입니다. 내가 궁금해하는 점은 응용 프로그램이 무한한 시간에 수천 개의 새로운 빈 양식 (새로운 양식)을 어떻게 만들 수 있을까요?

참고 : 내가 무제한 시간 무엇을 의미하는 것입니다 : 우리는 새로운 양식을 만들 수 있습니다, 양식이없이 항상 우리가 "새로운"버튼을 사전에

감사를 클릭 얼마나 많은 시간, 생성되지 않습니다 !

+2

'무제한 시간'이란 무엇을 의미합니까? –

+0

즉, 새 양식을 만드는 "단추"를 클릭하면 몇 번이나 "단추" – Reinhardt

+2

통화 쇼가 아니라 ShowDialog를 클릭해도 새 양식이 항상 만들어집니다. 부모 폼을 닫으십시오 –

답변

2

위의 대답은 좋지만 확장하고 싶습니다. 당신이 기본 폼

기본 폼은 당신이 때 프로그램 시작 실행 형태입니다 폐쇄되기 때문에 코드가 작동하지

이유입니다.간단한을 winform를 만들고 main 함수를 보면 당신은

 Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new Form1()); 

같은 것을 볼 수 있습니다 당신은 당신이 여기 다시 와서 계속 실행하고있는 Form1을 닫을 때, 주요 기능을 완료하고 프로그램을 종료 .

당신이 할 수있는 일, 다른 사람들이 제안한 것의 위에, 보이지 않는 메인 폼을 만들고, 메인 폼 생성 직후 다른 폼을 생성합니다. 이런 방식으로 원하는대로 양식을 닫고 열 수 있으며 프로그램을 닫지 않을 것입니다.

여러 가지 양식을 열어달라고 요청한 내용을 말합니다.

Form frm = new Form();// Creating a form 
frm.Show();// displaying the form 

ShowDialog 방법은 show가 무엇 않지만, 또한 그것을 열어 양식을 동결 : 당신이 할 수있는 간단하고합니다. 그래서 너는 그것을 원하지 않을 것이다.

+1

흠, 그래, 그 설정이 기본이라고 생각하지 않았습니다. 그러나 제안한 솔루션보다 나은 솔루션이 있습니다. [ShutdownMode를 AfterAllFormsClose로 변경하십시오] (http://stackoverflow.com/a/2751234/366904). –

+0

@CodyGray omg! 고맙습니다! 대단하다. 결코 그런 생각이 없어도. 와우 ... 나는 단지 내가 그것을 사용할 수 있었던 모든 시간을 생각한다 ... –

+0

VB.NET 응용 프로그램의 속성 페이지에 내장 된 옵션이다. 왜 C#에서 숨겨진 이유인지 모르겠습니다. –

0

다음 코드를 사용하면 기본 양식을 닫지 않고도 원하는 수의 양식을 열 수 있습니다.

//this.Hide(); 

Form2 secondaryForm = new Form2(); 
secondaryForm.Show(); 

//this.Close(); 
0

그것은 간단하다, 그들은 단지 원하는 폼 클래스의 새 인스턴스를 만들고 전화의 Show method :

MyForm frm = new MyForm(); 
frm.Show(); 

당신은 현재 모달 대화 상자를 생성 ShowDialog 방법을 사용하고 ~ 하나는 사용자가 응용 프로그램을 닫을 때까지 나머지 응용 프로그램과의 상호 작용을 차단하는 것입니다. 그것은 당신이 원하는 것이 아닙니다.

실제로 원래 양식을 닫지 않는 한 HideClose 방법을 호출 할 필요가 없습니다. Office 응용 프로그램에서는이 작업을 수행하지 않습니다. "새로 만들기"는 현재 창을 그대로두고 새 창을 열뿐입니다.

당신이이 새로운 하나를 열 때 원래의 형태를 닫으시겠습니까 경우, 이런 식으로 작업을 수행합니다

// Create and display new form 
MyForm frm = new MyForm(); 
frm.Show(); 

// Close this form 
this.Close(); 
0

난 당신이 우리가 버튼을 클릭하면, 형태가해야 produce 형태 원하는 것 같아요 양식의 수에 관계없이의 숫자에 관계없이 을 표시하고 표시하십시오. 당신이 목적을 위해 Timer을 사용할 수 있습니다 : 우리는 가능한 한 많은 형태를 생성 할 수 없기 때문에이 형태의 수를 제한해야

//Place this code in your main form constructor 
Timer t = new Timer {Interval = 100};  
t.Tick += (s,e) => { 
    new Form2().ShowDialog(); 
}; 
button1.Click += (s,e) => { 
    t.Start(); 
}; 
//NOTE: you have to use the stop button of the IDE to stop this, 
//it will run continuously producing new forms and showing them 
//without allowing you to touch the Close button of your main form. 

, 나는 테스트 (272 개) 형태의 System.dll에 던져진 StackOverflowException 있었다 것 :))). count 변수를 추가하고 타이머가 예를 들어 272에 도달하면 타이머를 중지하십시오.

관련 문제