Организовать прямоугольные формы, отправленные сзади или спереди

Есть ли способ устроить RectangleShape элементы управления для отправки их сзади и спереди в VB.NET. Мне нужно изменить порядок их оси Z, чтобы я мог изменить, какой прямоугольник находится впереди. Вот изображение моей формы:

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

1 ответ

Решение

Элементы управления формой из библиотеки элементов управления Visual Basic Powers не добавляются непосредственно в форму Controls коллекция. Вместо этого они добавляются в специальный ShapeContainer контроль. Обычно контейнер называется ShapeContainer1, но если нет, вы можете найти его имя, посмотрев на форму .Designer.vb файл.

Все формы хранятся в ShapeContainer1.Shapes коллекция. Чтобы изменить Z-порядок фигур, вам нужно изменить порядок, на который они ссылаются в этой коллекции. Другими словами, вам нужно изменить их индекс. Один с индексом 0 считается первым. Поэтому, чтобы отправить фигуру на передний план, вам нужно изменить ее индекс на 0, например:

ShapeContainer1.Shapes.SetChildIndex(RectangleShape1, 0)
ShapeContainer1.Refresh()    

Вам нужно позвонить Refresh после изменения индекса, чтобы заставить фигуры быть немедленно перерисованы.

Если вы хотите изменить их во время разработки, так как нет способа изменить заказ с помощью дизайнера, вы должны вручную изменить .Designer.vb файл для вашей формы. Например, вы можете изменить эту строку в вашем InitializeComponents метод из этого:

Me.ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {Me.RectangleShape2, Me.RectangleShape1})

К этому:

Me.ShapeContainer1.Shapes.AddRange(New Microsoft.VisualBasic.PowerPacks.Shape() {Me.RectangleShape1, Me.RectangleShape2})
Другие вопросы по тегам