Запретить активацию немодальных форм на панели задач при активном модальном диалоге - PullRequest
5 голосов
/ 27 июля 2010

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

1 Ответ

2 голосов
/ 27 июля 2010

Я репро, Win7.Я не вижу очевидного обходного пути для этого, за исключением того, что эти формы принадлежат, поэтому им не нужна кнопка на панели задач.То, что оконный менеджер Windows позволяет отключенным окнам становиться активными, довольно странно.Это не часто проверяется, очень необычно, когда одно приложение занимает так много кнопок на панели задач.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...