2011-01-26 2 views
6

Winforms App에는 두 개의 폼 클래스 (Form1 및 Form2)가 있습니다.적어도 하나의 모달 창이 열렸을 때 winforms 앱을 최소화하는 방법

Form1이이 같다 :

Form1 with a button on it

형식 2이 같다 (하여 ShowInTaskBar = 거짓)

Form2 with an OK and Cancel buttons

그리고 Form1에 코드 :

Form2 someForm = new Form2(); 
    private void btOpenAnotherWindow_Click(object sender, EventArgs e) 
    { 
     if (someForm.ShowDialog(this) == DialogResult.OK) 
      MessageBox.Show("OK!!!"); 
     else 
      MessageBox.Show("Not OK."); 
    } 

즉, 버튼이있는 창 을 모달로 열어서 다른 창이 클릭되면 "확인"또는 "취소"버튼을 클릭하여 두 번째 창을 닫을 때까지 기다립니다. 그리고 어떻게 닫혔는지에 따라 액션 (여기서는 MessageBox.Show() 호출로 표현됨)을 번갈아 수행하십시오.

내가이 필요합니다 사용자는 한 번에 하나의 창을 사용할 수 있습니다

  1. . (Modal forms, 그래서 Show() 대신 ShowDialog()를 사용했습니다)
  2. 양식이 닫히면 양식 닫는 방법에 따라 뭔가를하십시오 ("if (someForm.ShowDialog (this) ...)")
  3. 는 (사용자로) 전체 APP를 최소화 할 수 있도록.
  4. 가 "unminimize"제대로 이전 상태로 응용 프로그램 수 있으려면.
  5. (모든 최소화) WIN + M에 대응하는 프로그램 .

    : 키 조합

위의 예는 두 가지 방법으로 실패 0

  1. WIN + M에 응답하지 않습니다 (필요 5)
  2. (필요 3) 제목 표시 줄 단추를 클릭 최소화하지만, 주요 폼 (Form1)는 않기 때문에이 환상 경우 응용 프로그램은 최소화 할 것 최소화하지 않고 다른 열린 창 뒤에 숨겨져 있습니다. 빈 바탕 화면으로 예제를 실행하는 것은 실제로 일어나는 일을 보여줍니다. 사진은 다음과 같습니다

    Empty desktop with the app running

    후 :

전에 버튼을 클릭 최소화 Empty desktop with the Form2 (someForm) minimized

참고 : 기본 폼은

  • 를 최소화되지

    1. Form2 화면의 왼쪽 구석에 있습니다.

    형식 2는 만발한 창 (안 대화 상자 창 자체)이며, 나는 그것이 닫혀 단지까지와 상호 작용하는 사용자가 필요로하고 나는 또한 경우에 전체 응용 프로그램을 miminize 할 수 있도록 사용자가 필요합니다 그는 그것을 필요로한다.

    실제 양식을 여기 게시 할 수는 없지만,이 모형보다 더 선명합니다.

    여러 수준의 모달 창 (이 예에서와 같이 두 개뿐 아니라)에서 작동하는 솔루션이 필요합니다. 어떤 제안?

  • 답변

    0

    아마도 API 호출을 사용하여이 기능을 해킹 할 수있는 방법이 있지만 실제로는 실제 양식이 아닌 기본 양식 내부에있는 컨트롤을 사용하여 몇 가지 유형의 오버레이를 제안 할 것입니다. 이렇게하면 "모달"로 만들고 기본 창을 최소화/크기 조정할 수 있습니다.

    +0

    나는 전체 창 (= false를 this.enable) 해제하고 대신 ShowDialog를의 표시를 사용하지만, 그는 "열려있는 모든 창을 최소화"문제에 아무것도하지 않습니다 수 있습니다. –

    1

    여기서 수행하려는 작업에 대한 정보가 더 필요합니다. 이 코드를 호출 그것에 버튼, 간단한 폼 (Form1)이 : I 버튼을 클릭하면, 내가 같은 형태의 두 번째 인스턴스를 얻을 수

    private void button1_Click(object sender, EventArgs e) 
        { 
        Form1 form2 = new Form1(); 
        form2.ShowDialog(); 
        } 
    

    을하지만, 모달입니다. 나는 여전히 두 번째 모달 폼을 최소화하는 옵션을 가지고있다. (분명히 첫 번째 폼과 상호 작용할 수 없다.) 두 번째 폼을 최소화 할 때 전체 애플리케이션 (두 폼 모두)을 최소화한다. 지금 당연히 당신은 그 질문을하고 있습니다, 그래서 나는 당신을 이해하고 있다고 생각하지 않습니다. =)이 시나리오는 어떻습니까?

    • C
    +0

    두 번째 (모달) 창을 최소화하면 응용 프로그램의 기본 양식이 고정 된 상태이므로 최소화 할 방법이 없으므로 바탕 화면에 액세스 할 수 없습니다. 사용자가 필요로하는 것은 모달 창이 열려 있어도 앱의 기본 폼을 최소화하는 방법입니다. 따라서 다른 애플리케이션에서 일시적으로 다른 작업을 수행하거나 데스크톱과 상호 작용할 수도 있습니다. –

    +0

    얀코 - 문제를 반복 할 수 없습니다. = 어떤 운영 체제를 사용하고 있습니까? 실행중인 .NET Framework 버전 –

    +0

    안녕하세요. 내 개발 환경은 .Net Framework 3.5 SP1 및 VS .NET 2008이 설치된 Windows XP Pro SP3에서 실행됩니다. 그런데 Windows Vista 시스템에서이 응용 프로그램을 테스트 한 결과, 내 게시물에 답변 할 시간이있는 모든 사람과 감사합니다. –

    관련 문제