2010-07-27 5 views
5

대화 상자가 모달 인 경우 winforms 응용 프로그램에서 다른 모든 폼을 활성화하지 못하게하고 싶습니다. 이것은 Outlook의 작동 방식입니다. 두 개의 새 메일 메시지 열기, 한 메시지에서 주소록 열기 및 작업 표시 줄 또는 메시지 창을 클릭하여 다른 메일 메시지를 활성화 할 수 없습니다. winforms 응용 프로그램에서이 작업을 수행하는 방법 (소유권 설정이 작동하지 않음)모달 대화 상자가 활성화되어있을 때 작업 표시 줄이 모달이 아닌 폼을 활성화하지 못하도록 함

아래의 샘플 애플리케이션.

using System.Drawing; 
using System.Windows.Forms; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MainForm()); 
     } 
    } 

    public class MainForm : Form 
    { 
     public MainForm() 
     { 
     Text = "Main Form"; 
     var button = new Button{Text = "New form"}; 
     button.Click += (sender, args) => new Form2().Show(); 
     //button.Click += (sender, args) => { var form = new Form2(); AddOwnedForm(form); form.Show(); }; 
     Controls.Add(button); 
     button.Location = new Point(20, 20); 
     } 
    } 

    public class Form2 : Form 
    { 
     public Form2() 
     { 
     Text = "Form 2"; 
     var button = new Button{Text = "New modal form"}; 
     button.Click += (sender, args) => new Form{Text = "Modal Dialog", ShowInTaskbar = false}.ShowDialog(); 
     Controls.Add(button); 
     button.Location = new Point(20, 20); 
     } 
    } 
} 

문제를 재현하려면 응용 프로그램을 실행하고 두 개의 Form2 인스턴스를 연 다음 두 번째 인스턴스에서 모달 대화 상자를 엽니 다. 그런 다음 작업 표시 줄을 사용하여 첫 번째 Form2 인스턴스를 활성화하면 모달 대화 상자 위에 나타납니다.

업데이트 :이 업데이트는 WPF Windows에서도 마찬가지입니다.

업데이트 : 한스의 피드백에서 버그가있는 것으로 보이며 connect.microsoft.com here에게이 사실을보고했습니다.

답변

2

I repro, Win7. 나는이 양식을 소유하지 않고 작업 표시 줄 단추가 필요 없도록 확실한 해결 방법을 보지 못합니다. Windows 창 관리자가 비활성화 된 창을 활성화 할 수 있다는 것은 매우 이상합니다. 이것은 자주 테스트하지 않고, 하나의 앱이 많은 작업 표시 줄 버튼을 가지고있는 것은 매우 드문 일입니다.

+0

반갑습니다. 한스. 그래, 그게 문제를 해결할 수 있지만, 응용 프로그램은 Outlook에서 전자 메일/약속/등을 열 수 있도록 사용자가 데이터 양식을 열 수 있도록 설계되었습니다. –

+0

connect.microsoft.com을 시도하여 문제를보고 할 수 있습니다. 그것들을 심각하게 생각하면 기적이 필요합니다. –

관련 문제