Я хочу запретить активацию всех других форм в моем приложении 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 здесь .