Двумерный массив объектов.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
FedX
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.02.2012 (Пн) 17:50

Двумерный массив объектов.

Сообщение FedX » 17.03.2012 (Сб) 16:20

Уважаемые форумчане! Не могли бы вы мне помочь найти решение следующей проблемы:
Для начала хотел бы спросить, можно ли сделать двумерный массив объектов? Если нет, то хотелось бы иметь какую-нибудь альтернативу для решения данной задачи: Нужно создать сетку из объектов (к примеру изображений). Для удобства хотелось бы обращаться к этим объектам используя систему координат (к примеру 10 столбец, 3 строка). Но поскольку двумерный массив объектов создать нельзя, мне хотелось бы знать, как еще можно решить данную задачу?

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Двумерный массив объектов.

Сообщение FireFenix » 17.03.2012 (Сб) 16:38

Объявление для массива фиксированного размера
Код: Выделить всё
Dim Имя_Массива_Объектов(количество_элементов_массива - 1) as Имя_Объекта


Объявление для массива динамического размера
Код: Выделить всё
Dim Имя_Массива_Объектов() as Имя_Объекта

Для изменения границ массива:
Код: Выделить всё
ReDim Имя_Массива_Объектов(количество_элементов_массива - 1)

Для изменения границ массива с сохранением данных
Код: Выделить всё
ReDim Preserve Имя_Массива_Объектов(количество_элементов_массива - 1)


Русское описание в msdn: http://msdn.microsoft.com/ru-ru/library ... 00%29.aspx (в VB6 что-то может не поддерживаться)
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Двумерный массив объектов.

Сообщение Mikle » 17.03.2012 (Сб) 16:49

Всё в VB6 поддерживается, я так понял, автору нужен 2-мерный массив КОНТРОЛОВ
FedX
Кинь на форму PictureBox с именем pic и индексом 0, код такой:
Код: Выделить всё
Option Explicit

Dim Pics() As PictureBox

Private Sub Form_Load()
  Dim x As Long, y As Long, a As Long

  ScaleMode = vbPixels
  Show
  ReDim Pics(3, 3)
  For y = 0 To 3
    For x = 0 To 3
      a = x + y * 4
      If a > 0 Then Load pic(a)
      pic(a).Move x * 64, y * 64, 64, 64
      pic(a).Visible = True
      Set Pics(x, y) = pic(a)
    Next x
  Next y

  For y = 0 To 3
    For x = 0 To 3
      Pics(x, y).Print x; y
    Next x
  Next y
End Sub

Как видишь, Pics() - двумерный массив PictureBox-ов.

FedX
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.02.2012 (Пн) 17:50

Re: Двумерный массив объектов.

Сообщение FedX » 17.03.2012 (Сб) 16:59

Да, я по неопытности не совсем точно выразился. Я имел ввиду массив контролов...
Mikle, спасибо вам большое! Конечно, не очень удобно, ну что ж, придется видимо так работать. Но что же помешало Майкрософту дать возможность программистам делать 2-мерные, 3-мерные и т.д. массивы контролов (именно c помощью значений в параметре "Index" контрола)?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Двумерный массив объектов.

Сообщение alibek » 19.03.2012 (Пн) 8:19

FedX писал(а):Но что же помешало Майкрософту дать возможность программистам делать 2-мерные, 3-мерные и т.д. массивы контролов (именно c помощью значений в параметре "Index" контрола)?

Видимо то, что такие массивы элементов управления не нужны.
Lasciate ogni speranza, voi ch'entrate.

FedX
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.02.2012 (Пн) 17:50

Re: Двумерный массив объектов.

Сообщение FedX » 19.03.2012 (Пн) 20:55

alibek писал(а):Видимо то, что такие массивы элементов управления не нужны.

Но все-таки неплохо было бы, если бы такая функция присутствовала. Мне например сейчас она понадобилась.
P.S. Я возможно говорю как новичок, вам все же лучше знать)

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Re: Двумерный массив объектов.

Сообщение Vi » 23.03.2012 (Пт) 9:45

FedX писал(а): Но что же помешало Майкрософту дать возможность программистам делать 2-мерные, 3-мерные и т.д. массивы контролов (именно c помощью значений в параметре "Index" контрола)?

Помешало то, что произойдёт усложнение на пустом месте для обычно встречающихся ситуаций, не давая при этом никакого выигрыша. К тому же массив любой размерности можно представить как и эмулировать в виде одномерного массива. Например, A2(I,J) = A1(I*N+J) или A2(I,J) = A1(J*N+I), т.е. цена вопроса в написании функции перевода двух или больше индексов в один.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

FedX
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.02.2012 (Пн) 17:50

Re: Двумерный массив объектов.

Сообщение FedX » 27.03.2012 (Вт) 15:13

Теперь возникла проблема. При нажатии на какую-нибудь клетку мне нужно узнать двумерный индекс этой клетки, типа (a,b). Но как мне этот индекс узнать из обычного одномерного индекса?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Двумерный массив объектов.

Сообщение Хакер » 27.03.2012 (Вт) 15:19

Это не проблема. Для этого надо было в школе не пропускать математику. Ну и хотеть немного думать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Двумерный массив объектов.

Сообщение pronto » 27.03.2012 (Вт) 15:38

Да, достаточно понять, что задача обратна задаче по получению одномерного индекса из двумерного. Иными словами, если в первой нужно умножать и складывать, то здесь нужно делить (вычитать не обязательно).
O, sancta simplicitas!

FedX
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.02.2012 (Пн) 17:50

Re: Двумерный массив объектов.

Сообщение FedX » 27.03.2012 (Вт) 16:26

Я все это прекрасно понимаю, просто не думал, что сделать двумерный массив из одномерного - такая хлопотливая задача.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Двумерный массив объектов.

Сообщение Хакер » 27.03.2012 (Вт) 16:41

Хлопотная задача? Не смеши народ. Получить один индекс через \, а второй через Mod — это хлопотная задача? Хлопотная задач, это когда пару-тройку тысяч строк кода приходится писать из-за того, что кто-то где-то накосячил и приходится идти в обход.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 69

    TopList