2010-04-14 29 views

Respuesta

12

Windows Forms tiene una orden Z. , pero no puede acceder a él como un número. En su lugar, cada control tiene un método BringToFront y un método SendToBack, que mueven el control a la parte superior del orden z o al pie, respectivamente.

No estoy seguro exactamente por qué fue expuesto de esta manera, aunque rara vez se encuentra con situaciones en las que BringToFront o SendToBack no proporcionan lo que necesita.

Actualización: Estoy equivocado, puede acceder al pedido z directamente a través de un método en la colección Controls del contenedor del control. He aquí un método sencillo que lo envuelve:

public void SetControlZOrder(Control ctrl, int z) 
{ 
    ctrl.Parent.Controls.SetChildIndex(ctrl, z); 
} 

supongo que encapsulan esto en BringToFront y SendToBack sólo para mantener todo simple y fácil de usar. Yo aplaudo.

Actualización 2: interpreté sus comentarios a una respuesta diferente aquí para decir que usted quiere ser capaz de llevar un control que está dentro de un panel y más grande que el panel (de modo que parte de ella se oculta) y haz que el control esté delante del panel y más grande que él (para que puedas ver el control completo).

Usted puede hacer esto mediante la eliminación del control del panel, cambiando su posición por la posición del Grupo Especial inicial, y agregarlo a los controles del formulario:

panel1.Controls.Remove(button1); 
button1.Left += panel1.Left; 
button1.Top += panel1.Top; 
this.Controls.Add(button1); 

Los desplazamientos a la izquierda y superior son necesarias porque el botón de posición era originalmente relativa al panel, y ahora será relativa a la forma. Los cambios lo mantienen en la posición virtual original, por lo que parece salir del panel.

Luego, tendrá que encargarse de volver a colocarlo en el panel, que es exactamente lo contrario al código anterior.

+1

@ sv88erik: borré mi respuesta porque esta es mejor, pero aquí está el comentario que escribió en ella: '" el problema es que entonces, ¿qué es que los controles dentro del panel no muestran más que el tamaño de la Lo hago de modo que cuando haga clic en los controles dentro del panel será más grande, y luego se queda sin el tamaño del panel .... "'. Estoy seguro de que lo que quiere hacer es posible, pero no estoy seguro de la forma correcta de hacerlo. Una opción podría ser hacer que TODOS los controles sean hijos del Formulario (theControl.Parent = theForm). Entonces se superpondrán entre sí. –

Cuestiones relacionadas