Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
    ;Dim bb(30) As PictureBox
    ;Dim 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
            ;Dim 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 напрямую

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам