2011-05-26 20 views
6

Estoy intentando cambiar el orden z para un panel acoplado en el diseñador VS2010. Sin embargo, cada vez que guardo el diseñador, lo cierro y lo vuelvo a abrir, el orden z ha vuelto a ser como era antes de que lo cambiara.VS2010 Diseñador Orden Z

He intentado utilizar el esquema del documento y el menú contextual SendToBack, pero ambos se comportan de la misma manera. También noté que en otra solución en la que sí funciona, el archivo .designer.cs en realidad no cambia (asumí que el control de agregar orden dictaría z-order).

¿Hay alguna otra manera que puedo hacer esto? Realmente no quiero hacer esto en tiempo de ejecución ...

EDITAR

this.mainPanel.BackColor = System.Drawing.SystemColors.Control; 
this.mainPanel.Controls.Add(this.pnlRangeSelector); 
this.mainPanel.Controls.Add(this.headerAndFooterRowCounts); 

pnlRangeSelector tiene Dock.Top headerAndFooterRowCounts tiene Dock.Right

cuando esto hace sin embargo, se lleva a headerAndFooterRowCounts todo el lado derecho de su panel principal, mientras que pnlRangeSelector toma la parte izquierda.

Eso me sugiere que el pnlRangeSelector no está correctamente en la parte posterior, como se supone que debe ser.

enter image description here

ACTUALIZACIÓN

int i = 0; 
String output = String.Empty; 
foreach (var c in this.mainPanel.Controls) 
{ 
    if (c == pnlRangeSelector) { output += "RangeSelector at : " + i.ToString() + "\r\n"; } 
    else if (c == this.headerAndFooterRowCounts) { output += "HeaderAndFooter at : " + i.ToString() + "\r\n"; } 
    i++; 
} 
MessageBox.Show(output); 

parece que el fin es siempre RangeSelector = 0, HeaderAndFooter = 1. Incluso si llamo a la siguiente justo antes de esto:

this.mainPanel.Controls.SetChildIndex(this.pnlRangeSelector, 1); 
this.mainPanel.Controls.SetChildIndex(this.headerAndFooterRowCounts, 0); 

Respuesta

1

El orden en que se agregan los controles a la colección de Controles del padre determina el orden z. Así que la mejor manera de resolver esto (que yo sepa) es hacer una copia de seguridad del archivo del diseñador y luego editar el orden en que los controles son añaden a la colección

el código postal si necesita ayuda.

+0

Los controles ya están agregados en el orden correcto (primero el panel de fondo, el panel de primer plano). – Ian

+0

declarado o agregado a la colección? ¿Podrías publicar el código? –

+0

Agregó el código de adición del diseñador. – Ian

1

Tuve un problema similar y descubrí que el problema estaba en el código del Diseñador. En mi forma base, caseHeader estaba acoplado a la parte superior. Luego, agregué formInstructions y lo acoplé a la parte superior. Por lo tanto, mi base tenía formInstructions debajo del caseHeader. Esta es la apariencia deseada.

En formas derivadas, la apariencia se revirtió. Investigué sobre docking, autosize, z-orders, etc., todo fue en vano.

Finalmente, encontré que Designer estaba cambiando los índices secundarios de varios controles. Esto es lo que hice en el código del Diseñador para solucionar el problema:

//this.Controls.SetChildIndex(this.caseHeader, 0); 
+0

Esto está más cerca de identificar el origen del problema: para mí para un control particular y probablemente para otros, Designer está subvirtiendo el orden Z al llamar a 'SetChildIndex()'. Sin embargo, si lo comenta en Designer, Designer revertirá su edición en el siguiente guardado. Entonces esta no es una solución. – binki

Cuestiones relacionadas