대화 상자가 모달 인 경우 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에게이 사실을보고했습니다.
반갑습니다. 한스. 그래, 그게 문제를 해결할 수 있지만, 응용 프로그램은 Outlook에서 전자 메일/약속/등을 열 수 있도록 사용자가 데이터 양식을 열 수 있도록 설계되었습니다. –
connect.microsoft.com을 시도하여 문제를보고 할 수 있습니다. 그것들을 심각하게 생각하면 기적이 필요합니다. –