Страница: 1 |
Страница: 1 |
Вопрос: Контролы с индексом
Добавлено: 06.12.11 10:56
Автор вопроса: Cramper
Известно, что в VB6 контролы были с индексами, нпример Label1(i). В VB 2010 такой возможности видимо нет. Это создает неудобство в программировании. Я обхожу его так
Public Class Form1
Dim i, j, ij As Integer
Dim PicArray(800) As PictureBox
Sub SetControlArray()
PicArray(1) = PictureBox1
PicArray(2) = PictureBox2
PicArray(3) = PictureBox3
PicArray(4) = PictureBox4
.......
End Sub
И далее работаю с индексами, например:
PicArray(i).Left = 0
PicArray(i).Top = 0
Все это не совсем красиво и главное громоздка инициализация. Может у кого есть более красивые решения?
Буду благодарен, если поделитесь.
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 06.12.11 11:31
Номер ответа: 2
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #2
Добавлено: 06.12.11 12:16
А если по существу, без лирики?
Номер ответа: 3
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 06.12.11 17:15
Есть, и они зависят от задачи.
Номер ответа: 4
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #4
Добавлено: 07.12.11 08:21
Вам бы в дипломаты. Там свойство говорить не о чем высоко ценится.
Номер ответа: 5
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #5
Добавлено: 07.12.11 09:54
Можно сколь угодно долго говорить ниачем, пока собеседник наконец не поймет\не объяснит, что сам хочет
Номер ответа: 6
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #6
Добавлено: 07.12.11 15:13
Чего ж тут непонятного. Хотел бы обращаться с метками, текстами, картинками,.... как с индексируемыми элементами. Как это было в VB6.
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 07.12.11 16:17
Ну, как ты уже сам себе и ответил, индексов у контролов в .NET'e нет.
Другие способы реализации управления множествами контролов есть, и они зависят от задачи. *wall*
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 07.12.11 20:19
Cramper, подход вцелом правильный. Чтоб сказать как конкретно стоит делать в вашем случае, нужно чтоб вы подробнее описакли задачу, сколько элементов, известно ли заранее их кол-во, и т.п.
Обычно вместо массива испольузется List<PictureBox>, контролы создаются во время выполнения и кидаются на форму, а также ложатся в этот List, позиционируются на форме и т.п.
Номер ответа: 9
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #9
Добавлено: 08.12.11 08:16
контролы создаются во время выполнения и кидаются на форму
Вот это интересно! Не можете привести примерчик создания, например PictureBox -ов
Номер ответа: 10
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #10
Добавлено: 08.12.11 09:14
new PictureBox()
Номер ответа: 11
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #11
Добавлено: 08.12.11 12:33
Есть заданное количество однотипных PictureBox-ов. Их количество на форме порядка 1000. Необходимо менять их положение, видимость и т.д.
Номер ответа: 12
Автор ответа:
Cramper
Вопросов: 15
Ответов: 93
Профиль | | #12
Добавлено: 08.12.11 14:12
Спасибо всем за наводки. Вот то что мне нужно было.
Public Class Form1
 im bb(30) As PictureBox
 im i As Iteger
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i = 1 To 20
 im b As New PictureBox()
Me.Controls.Add(b)
bb(i) = b
bb(i).Left = i * 50
bb(i).Top = i * 50
bb(i).Image = Image.FromFile("C:\Documents and Settings\User\Мои документы\Мои рисунки\1.JPG"
'If i Mod 2 = 0 Then
'bb(i).BackColor = Color.Blue
'Else
'bb(i).BackColor = Color.Red
'End If
Next
End Sub
End Class
Номер ответа: 13
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #13
Добавлено: 08.12.11 22:38
для этого лучше использовать wpf, а еще лучше - directx напрямую