Manténgalo abierto configurando ShowInTaskbar en falso antes de ShowDialog();
private void Form1_Load(object sender, EventArgs e)
{
Form2 newForm = new Form2();
Button b = new Button();
newForm.Controls.Add(b);
b.Click += new EventHandler(click);
this.Show();
// add this line of code...
newForm.ShowInTaskbar = false;
newForm.ShowDialog();
}
private void click(object sender, EventArgs e)
{
((Form)((Control)sender).Parent).ShowInTaskbar = false;
}
O simplemente no haga la segunda forma modal. Esto funciona también
private void Form1_Load(object sender, EventArgs e)
{
Form2 newForm = new Form2();
Button b = new Button();
newForm.Controls.Add(b);
b.Click += new EventHandler(click);
this.Show();
newForm.Show();
}
que no conocen el mecanismo específico aquí, pero es evidente que lo que está sucediendo es que el cambio de la bandera (que en realidad cambia uno o más WS_EX_xxx estilos de ventana) está haciendo que la bomba modal del ShowDialog() para salir. Esto, a su vez, te está causando (¡finalmente!) Salir de Form1_Load y luego tu newForm queda fuera del alcance y se destruye.
Así que su problema es una compbinación de ShowDialog() y el hecho de que no está preparado para que ShowDialog() salga alguna vez.
Ahora, un modal para no debe aparecer con un icono de la barra de tareas, en primer lugar, que realmente debería ser sólo el 1 icono de la barra de tareas para una aplicación y todo de él es formas modales, ya que cuando un formulario modal está en marcha, el formulario principal está deshabilitado de todos modos. Cuando se minimiza el formulario principal, se ocultan todos los formularios modales que posee, etc.
Así que si realmente desea que este segundo formulario sea modal, no debe darle al usuario la posibilidad de darle un icono de la barra de tareas. Si usar ShowDialog() fue solo código de prueba, entonces no se preocupe. El problema desaparecerá cuando el formulario se ejecute en la bomba de la aplicación principal.
No, esto es simplemente incorrecto. los formularios modales y los iconos de la barra de tareas no se mezclan. Usa uno u otro, pero no ambos. –
Estoy de acuerdo con usted pero no especifico especificaciones, ojalá fuera alguna vez – Fredou
; el problema no es solo que está violando las convenciones, sino que también se basa en un comportamiento indefinido o con errores. Puede encontrar que esto no funcionará en todas las versiones de Windows, por ejemplo. – overslacked