2010-07-27 10 views
5

Quiero evitar la activación de todos los demás formularios en mi aplicación de formularios cuando cualquier diálogo es modal. Así es como funciona Outlook: abra dos nuevos mensajes de correo electrónico, abra la libreta de direcciones de un mensaje y no pueda activar el otro mensaje de correo usando la barra de tareas o haciendo clic en la ventana del mensaje. ¿Cómo puedo hacer esto en una aplicación de winforms (tenga en cuenta que configurar la propiedad no funciona)?Impedir que la barra de tareas active los formularios no modales cuando un cuadro de diálogo modal está activo

Solicitud de muestra a continuación.

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); 
     } 
    } 
} 

Para reproducir el comportamiento, ejecute la aplicación, abra dos instancias de Form2 y luego abra un diálogo modal desde la segunda instancia. A continuación, utilice la barra de tareas para activar la primera instancia de Form2 y aparece encima del cuadro de diálogo modal.

Actualización: este repros con Windows WPF también.

Actualización: De los comentarios de Hans, esto parece ser un error y he informado de esto a connect.microsoft.com here.

Respuesta

2

I repro, Win7. No veo una solución obvia para esto más allá de hacer que estos formularios sean propiedad, por lo que no necesitan un botón en la barra de tareas. Que el administrador de ventanas de Windows permita que las ventanas deshabilitadas se activen es bastante extraño. Esto no se pone a prueba a menudo, muy raro que una aplicación tome tantos botones de la barra de tareas.

+0

Gracias por la repro Hans. Sí, eso resolvería el problema, pero la aplicación está diseñada para permitir que el usuario abra los formularios de datos al igual que Outlook te permite abrir correos electrónicos/citas/etc. –

+0

Puede intentar connect.microsoft.com para informar el problema. Aunque tomarlo en serio requeriría un milagro. –

Cuestiones relacionadas