2009-05-20 11 views
14

Tengo una aplicación .NET 3.5 MDI WinForms.Problema con el icono para crear una nueva forma de MDI hija maximizada en .NET

Establecí la propiedad Icon de un formulario secundario y el ícono aparece correctamente en la esquina superior izquierda del formulario. Luego maximizo el formulario hijo y el ícono aún está bien.

Con el formulario hijo aún maximizado, abro otra ventana secundaria, que automáticamente aparece maximizada. El icono de este formulario no es el de la propiedad Icon, sino el icono predeterminado de .NET (el que tiene los recuadros azul, rojo y amarillo). Sin embargo, si I cambia el tamaño del formulario padre MDI, el icono se restablece solo y se muestra correctamente.

¿Alguien tiene alguna solución o sabe por qué sucede esto?

+0

Ha intentado hacer .Refresh una en la ventana del niño después de abrirlo? –

Respuesta

8

correcto que he encontrado una solución ...

La solución a esto es establecer el icono de nuevo en el evento de carga de la forma infantil de la siguiente manera:

private void StatsForm_Load(object sender, EventArgs e) 
{ 
    //bug that means you have to set the desired icon again otherwise it reverts to default when child form is maximised 
    Icon = new System.Drawing.Icon("research.ico"); 
} 

Esto significa que usted primero tendrá que agregar el archivo de icono en cuestión en su proyecto/solución de VS y configurarlo en "Copiar siempre" para que se copie cuando se construya su solución.

HTH Calano

+2

Funciona como un encanto. Gracias. Por alguna razón, nunca pensé en intentar restablecer el ícono. También funciona como un recurso incrustado, por lo que no tiene una tonelada de archivos (reemplazables) en el directorio final. –

4

me encontré con que la única solución era para desactivar y volver a activar el niño MDI:

document.Show(); 
// Work-around for error in WinForms that causes MDI children to be loaded with the default .NET icon when opened maximised. 
ActivateMdiChild(null); 
ActivateMdiChild(document); 

Ésta es la solución dada en this reply on MSDN forums y funcionó para mí.

+0

Funciona, pero crea un problema si usa ShowDialog en cualquier lugar. – Drake

+0

¿Qué tipo de problema? –

+0

Si usa ShowDialog en lugar de Mostrar en su código, la ejecución bloquea en esa llamada. Solo cuando el diálogo está cerrado se ejecutan las llamadas a ActivateMdiChild, pero el segundo no funcionará porque 'document' ya no existe en ese punto – alldayremix

0

Mi solución: Deje la propiedad MdiChild "ShowIcon" establecida en true, asigne un icono transparente de 1x1. Problema resuelto.

+1

Tal vez me esté perdiendo algo, pero no estoy seguro de cómo esto se aplica a mi pregunta original El problema no es que se muestre un icono cuando no quiero uno, sino que el icono * que quiero mostrar * no se muestra y, en su lugar, se reemplaza por el predeterminado. –

0

La mejor solución que encontré para solucionar este problema es here.

aNewForm.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedDialog 
AddHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

aNewForm.Show() 
aNewForm.WindowState = FormWindowState.Maximized 

RemoveHandler aNewForm.SizeChanged, AddressOf Form_SizeChanged 

el manejador

Protected Sub Form_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) 

    If WindowState = FormWindowState.Maximized Then 
     If FormBorderStyle <> FormBorderStyle.Sizable Then FormBorderStyle = FormBorderStyle.Sizable 
    End If 

End Sub 
1
form.WindowState = FormWindowState.Normal 
form.Show() 
form.WindowState = FormWindowState.Maximized 
form.Show() 

resuelto mi problema!

3
private void frmChild_Shown(object sender, EventArgs e) 
{ 
    // Work-around for maximized BUG 
    this.Icon = this.MdiParent.Icon; 
    this.WindowState = FormWindowState.Normal; 
    this.WindowState = FormWindowState.Maximized; 
} 
11

Una ligera modificación a la solución Calano:

private void MdiBase_Load(object sender, EventArgs e) 
    { 
     // Fixes bug where loading form maximised in MDI window shows incorrect icon. 
     this.Icon = Icon.Clone() as Icon; 
    } 

Esto le permite configurar el icono en tiempo de diseño (tal como lo haría para otras formas), y no necesita ninguna modificable acceso a archivos o recursos.

2

Descubrí que esto solucionará el problema también.

myForm.WindowState = FormWindowState.Normal; 
myForm.Show(); 
myForm.WindowState = FormWindowState.Maximized; 
0

La adición de esta como la primera línea en el método Form_Load en la Infancia MDI funciona para mí:

this.Icon = new Icon(this.Icon, this.Icon.Size); 
Cuestiones relacionadas