Cómo controlar el orden de acoplamiento en WinForms

80

Como dice el título, estoy buscando una forma de controlar el orden en que los elementos se acoplan a la parte superior de mi control.

He jugado con el diseñador de formularios de Windows y parece que no puedo encontrar lo que RightClick->Order->SendToFrontestá haciendo, porque eso es exactamente lo que quiero que suceda. Hasta donde puedo suceder, a medida que agrego mi contenido a mi control, el contenido más nuevo siempre está en la parte superior, y me gustaría que el contenido más nuevo esté en la parte inferior y el contenido más antiguo esté en la parte superior. parte superior.

Resumen: ¿Existe una manera fácil en WinForms (C #) de controlar el orden en que las cosas se acoplan a los lados de los controles?

Editar: tengo que hacer esto desde el código subyacente mientras agrego mis controles, no puedo usar ninguna característica del diseñador de WinForm, pero lo que estoy tratando de hacer es imitar el DiseñadorSendToBacky lasSendToFrontcaracterísticas de WinForms

Caesay
fuente
Gracias; Necesitaba controlar programáticamente el acoplamiento y ni siquiera me di cuenta de que su orden controlaba cómo se acoplaban.
Eagle-Eye

Respuestas:

79

Utilice estos métodos:

myControl.SendToBack();
myControl.BringToFront();
serhio
fuente
2
Estaba buscando a control.SendToFront()Ver, ahora eso era fácil. ¡Gracias!
Caesay
10
@Tommy: ¿Sueles programar desde detrás de la computadora? :)
Ashley Tate
6
En la ventana del diseño, haga clic derecho. seleccione sendToBack y haga clic derecho de nuevo: BringToFont
Grey Wolf
Este método también se aplica a agregar controles de acoplamiento en el diseñador de formularios. Con el menú contextual, puede enviar hacia atrás, luego traer al frente y luego acoplar y será el último control en la "cadena" de acoplamiento.
Anders Lindén
142

Vaya a Ver → Otras ventanas → esquema del documento.

En esa ventana, arrastre los controles para que el acoplamiento sea el que desee.

Stormenet
fuente
Me preguntaba qué palabras podría usar para describir esa ventana exacta, llegar allí eventualmente en Google, ¡Gracias!
Cooperativas
12
Creo que esta debería ser la respuesta
Xinchao
1
Esto no funciona si los controles se agregan dinámicamente.
Wayne
Resuelva mi problema fácilmente en el momento del diseño.
Hao Nguyen
1
8 años después ... la mejor respuesta
soulshined
12

Como dijiste, el control más nuevo agregado a la colección de controles es el que está en la parte superior. Si necesita que se agregue un control más nuevo en la parte inferior, le sugeriré crear una lista de controles, agregar los controles a la lista, invertir la lista y agregar la lista a la colección de controles.

List<Control> controls = new List<Control();
controls.Add(new myFirstControl());
controls.Add(new mySecondControl());
controls.Reverse();
this.Controls.AddRange(controls.ToArray());
Alexandre Pepin
fuente
6

Un control tiene dos métodos para lograr lo que está buscando: BringToFronty SendToBack.

Gerrie Schenck
fuente
4

El orden en el que se agregan los controles a la colección Controls determina el orden de acoplamiento.

Oliver Hanappi
fuente
Necesito editar el orden de acoplamiento después de que se agreguen los controles a la colección
caesay
2
Entonces ve por el ControlCollection.SetChildIndex(control, index)método.
Oliver Hanappi
@Oliver Hanappi: ¿Es posible hacer esto en el diseñador? ¿Sin código?
user2366975
Debería poder reordenar los controles en la ventana Esquema del documento ( blogs.msdn.com/b/zainnab/archive/2010/11/30/… )
Oliver Hanappi
3

(Por el simple hecho de mostrar otra opción): En Visual Studio 2012 (y posterior):

  1. Seleccione el control que desea mover al frente (o atrás);
  2. Haga clic en los botones marcados a continuación (Traer al frente / Enviar al fondo); ingrese la descripción de la imagen aquí

Esto le dará la posibilidad de reorganizar los controles en el orden deseado.

Arthur Zennig
fuente
2

Tenga en cuenta que al hacer esto de manera programática, existe una manera muy fácil de lograrlo, a saber:

containerPanel.Controls.SetChildIndex(Element, 0); //sends element to the bottom of the list
Jack
fuente
-3

Utilice el FlowLayoutPanel que hace exactamente lo que quiere.

jhersey29
fuente
1
Esta publicación no responde a la pregunta, y esta pregunta tiene 6 años y ya tiene respuestas relevantes.
Caesay