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.
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. –
Puede intentar connect.microsoft.com para informar el problema. Aunque tomarlo en serio requeriría un milagro. –