WinForms имеет z-порядок, но вы не можете получить к нему доступ в виде числа. Вместо этого каждый элемент управления имеет метод BringToFront
и метод SendToBack
, которые перемещают элемент управления в верхнюю часть z-порядка или в нижнюю часть соответственно.
Не знаю точно, почему это было раскрыто таким образом, хотя вы редко сталкиваетесь с ситуациями, когда BringToFront или SendToBack не предоставляют то, что вам нужно.
Обновление: Я ошибаюсь, вы можете получить доступ к z-порядку напрямую с помощью метода в коллекции Controls
контейнера элемента управления. Вот простой метод, который оборачивает это:
public void SetControlZOrder(Control ctrl, int z)
{
ctrl.Parent.Controls.SetChildIndex(ctrl, z);
}
Я предполагаю, что они инкапсулировали это в BringToFront
и SendToBack
, чтобы все было просто и удобно. Я аплодирую.
Обновление 2: Я интерпретировал ваши комментарии к другому ответу здесь, чтобы означать, что вы хотите иметь возможность взять элемент управления, который находится внутри панели и больше, чем панель (так что эта часть скрыто) и сделайте так, чтобы элемент управления находился перед панелью и был больше его (чтобы вы видели весь элемент управления).
Это можно сделать, удалив элемент управления с панели, сместив его положение на исходную позицию панели и добавив его к элементам управления формы:
panel1.Controls.Remove(button1);
button1.Left += panel1.Left;
button1.Top += panel1.Top;
this.Controls.Add(button1);
Сдвиги влево и вверх необходимы, потому что позиция кнопки изначально была относительно панели, а теперь будет относительно формы. Сдвиги удерживают его в исходном виртуальном положении, поэтому он, кажется, выходит из панели.
Затем вам нужно будет положить его обратно на панель, что является противоположностью приведенного выше кода.