"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);

Сдвиг влево и вверх необходим, потому что позиция кнопки изначально была относительно панели, а теперь будет относительно формы. Сдвиги удерживают его в исходном виртуальном положении, поэтому он, кажется, выходит из панели.

Затем вам нужно будет положить его обратно на панель, что является противоположностью приведенного выше кода.

Другие вопросы по тегам