VB.Net Выбор LineShape

В Vb.Net я динамически создаю несколько текстовых полей и меток. Я называю их бывшими. VLabel1, VLabel2, VLabel3 ... а затем я использую CType и переменную для их использования.

Dim VarName as String
Dim i as Integer
Dim MyLabel as Label

i=0
VarName = ("VLabel" & i.ToString)
MyLabel = CType(Panel1.Controls(VarName), Label)

Теперь я добавляю строки с помощью LineShape (я не могу использовать метку с высотой 1, потому что мои линии диагонали). Могу ли я использовать аналогичный способ выбора конкретной строки или мне нужно использовать цикл в моем ShapeContainer и сравнивать имена, пока я не найду то, что мне нужно?

Спасибо,

Стефан


person Stephane    schedule 05.04.2018    source источник
comment
LineShape не является производным от Control, поэтому попытка найти его через массив Panel1.Controls () невозможна. Да, вам нужно перебрать ShapeContainer.   -  person Hans Passant    schedule 05.04.2018


Ответы (2)


мне нужно использовать цикл в моем ShapeContainer и сравнивать имена, пока я не найду то, что мне нужно?

Как вы думаете, что делает Controls(VarName)? Он также должен искать элемент управления по имени. Если вас это устраивает, вы можете написать в своей форме метод, который будет делать то же самое.

Но лучший вариант как для LineShapes, так и для Labels - использовать List(Of LineShape) и List(Of Label). Когда вы создаете динамический элемент управления и добавляете или удаляете его из формы, также добавляйте или удаляйте его из своего списка. Затем вы можете ссылаться на эти элементы по индексу без необходимости создавать строку имени. Так у вас также будет меньше забросов.

person Joel Coehoorn    schedule 05.04.2018

Другой вариант индексировать их по имени - использовать Dictionary(Of String,Lineshape) и Dictionary(Of String, Label). Несколько вспомогательных подпрограмм могут обрабатывать добавление / удаление, где это необходимо, и добавление / удаление в соответствующий словарь. Благодаря этому вы также устраняете необходимость в приведении типов, поскольку фактические объекты уже имеют правильный тип.

Еще лучше, поскольку фигуры не являются частью стандартной библиотеки, я бы посоветовал узнать, как нарисуйте линии прямо на вашей форме.

Я никогда этого не делал, но должно быть возможно создать линии как элементы управления, создав класс, наследующий от класса Control, и переопределив подпрограмму Paint для рисования линии.

person tinstaafl    schedule 05.04.2018