"Z-Index" в winforms
В CSS у нас есть свойство, называемое z-index. Что такое же в Winfrom, установленном для элемента управления Panel в Z-Index?
1 ответ
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);
Сдвиг влево и вверх необходим, потому что позиция кнопки изначально была относительно панели, а теперь будет относительно формы. Сдвиги удерживают его в исходном виртуальном положении, поэтому он, кажется, выходит из панели.
Затем вам нужно будет положить его обратно на панель, что является противоположностью приведенного выше кода.