Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как создать массив контролов? 
:(
    Опции темы
Exception
Дата 29.12.2004, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



В VB.NET исключили возможность создания массива контролов в режиме создания формы. Но на самом деле, это только к лучшему! Потому что теперь, это стало более наглядно, и значит более гибко smile
Короче посмотрим, как можно создать массив контролов, на примере массива PictureBox'ов.

Идея состоит в том, чтобы динамически(во время выполнения) создать нужное количество контролов, и присвоить каждому индексу обыкновенного массива, ссылку на созданный объект, а также добавить процедуры обработки события(в VB6 этого сделать было нельзя, из-за этого, было бесполезно создавать контролы во время выполнения)


Код
'Объявим простую переменную-массив типа PictureBox
  Dim pics() As System.Windows.Forms.PictureBox

  Private Sub InitPictureBoxArray(ByVal Count As Integer)
      Dim i As Integer

      'Нижний индекс массива равен 0, поэтому, если мы хотим создать например
      'пять контролов, то должны иметь размер массива от 0 до 4
      Count-=1

      'Изменяем размерность массива
      ReDim Preserve pics(Count)

      For i = 0 To Count
          'Создаем новый экземпляр объекта, типа PictureBox
          pics(i) = New System.Windows.Forms.PictureBox()

          With pics(i)
              'Ради примера, чтобы было видно все наши контролы,
              'Задаем каждому следующему PictureBox, разную Х координату (i*150)
              .Location = New System.Drawing.Point(i * 150, 0)
              'Задаем цвет
              .BackColor = System.Drawing.Color.AliceBlue

              'Здесь пишем любую нужную вам инициализацию экземпляров PictureBox
          End With

          'Далее задаем функции для обработки событий 
          'MouseEnter, MouseLeave и Click соответственно
          AddHandler pics(i).MouseEnter, AddressOf picMEnter
          AddHandler pics(i).MouseLeave, AddressOf picMLeave
          AddHandler pics(i).Click, AddressOf picClick
      Next i

      'Добавляем весь массив в коллекцию контролов формы
      Me.Controls.AddRange(Me.pics)
  End Sub


  Private Sub picMEnter(ByVal sender As System.Object, ByVal e As System.EventArgs)
      sender.BorderStyle = BorderStyle.Fixed3D
  End Sub

  Private Sub picMLeave(ByVal sender As System.Object, ByVal e As System.EventArgs)
      sender.BorderStyle = BorderStyle.None
  End Sub

  Private Sub picClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
      Dim i As Integer
      'Если надо узнать именно индекс в массиве, 
      'то ищем объект sender
      i = Array.IndexOf(pics, sender)
      MsgBox("   Кликнули по " & i & " PictureBox'у   ")
  End Sub


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.