Tienes que utilizar la propiedad índice Z, y porque no hay edificados -en función de hacer lo que quieras, hice mi propio. Cuanto mayor sea el valor de Z, más "cercano" estará el control. Así que desea poner su control en la parte superior sin tener que establecer un alto valor de Z arbitrario.
Así que aquí hay una pequeña función que escribí para mí para hacer exactamente eso. Nota: esto supone que está utilizando un Canvas y UserControls. Así que es posible que tenga que adaptarlo un poco si ese no es su caso.
Básicamente obtendrá el índice del control para moverse, luego cualquier control que esté actualmente encima bajará en 1 y el control para mover se colocará en la parte superior (para mantener la jerarquía).
static public void BringToFront(Canvas pParent, UserControl pToMove)
{
try
{
int currentIndex = Canvas.GetZIndex(pToMove);
int zIndex = 0;
int maxZ = 0;
UserControl child;
for (int i = 0; i < pParent.Children.Count; i++)
{
if (pParent.Children[i] is UserControl &&
pParent.Children[i] != pToMove)
{
child = pParent.Children[i] as UserControl;
zIndex = Canvas.GetZIndex(child);
maxZ = Math.Max(maxZ, zIndex);
if (zIndex > currentIndex)
{
Canvas.SetZIndex(child, zIndex - 1);
}
}
}
Canvas.SetZIndex(pToMove, maxZ);
}
catch (Exception ex)
{
}
}
la pregunta no era sobre cambiar el orden, sino traer al frente, eso seguramente, consiste en fundar el maxOrder existente, y establecer un orden más grande que este ... – serhio