Про массивы

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

Про массивы

Сообщение Nicht Shiessen 2 » 13.11.2004 (Сб) 23:39

Добрый день!

Вот хочу задать пару вопросов промассывы в VB.

1. Можно ли создавать многомерные динамические массивы и как? Я пробовал как одномерный redimom VB ругается. И если нельзя (как я уже начинаю подозревать) то как адекватнее обойти проблему того, что нужен многмерный квадратный массив, причем размерность его может быть разной и заранее неизвестна?

2. Как лучше и правильней передавать массивы в функции и процедуры. У меня сейчас получается: я передаю массив в процедуру, он там меняется, но меняется и во всей остальной программе, чего мне не нужно, т. е. мне надо передать не ссылку на массив, а его значения.

3. Каким контролом правильнее отображать массивы на форме. Вроде есть FlexGrid (но там как я понял нельзя менять значения данных) и еще есть DBGrid. Но там две строки, а мне надо явно больше. Конечно можно и текстбоксов накидать, но это долго и неудобно? Может еще какие нить контролы по этому поводу есть? Или я не все свойства этих знаю?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.11.2004 (Вс) 6:10

  1. Код: Выделить всё
    dim b() as byte
    redim b(1 to 10, 5 to 100)
  2. после получения массива копировать его в переменную массива нужного типа.
  3. Код: Выделить всё
    MSFlexGrid1.Rows = 10
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Nicht Shiessen 2
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.11.2004 (Сб) 21:42

Сообщение Nicht Shiessen 2 » 15.11.2004 (Пн) 2:42

GSerg писал(а):[list=1][*]
Код: Выделить всё
dim b() as byte
redim b(1 to 10, 5 to 100)
[*]


Во. Спасибо большое такой конструкции хитрой не знал!!!
после получения массива копировать его в переменную массива нужного типа


Вот этого я немного не понял, в принципе и так вроде пока обошелся, но если есть какой нить хитрый способ передачи массивов, то расскажите, пожалуйста - на будущее пригодится.

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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.11.2004 (Пн) 6:16

2.
Код: Выделить всё
function MyFunc(arr() as long) as long
  dim arrcopy() as long
  arrcopy=arr
  'изменяем arrcopy, arr не трогаем
end function
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 15.11.2004 (Пн) 10:19

Для сохранения значения массива вот так:
dim b() as byte
redim preserve b(1 to 10, 5 to 100), но второй раз с тем же массивом сделать можно только так:
redim preserve b(1 to 10, 5 to 120), а число первых изменять нельзя, или я ошибаюсь?
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Nicht Shiessen 2
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 13.11.2004 (Сб) 21:42

Сообщение Nicht Shiessen 2 » 15.11.2004 (Пн) 17:53

GSerg писал(а):2.
Код: Выделить всё
function MyFunc(arr() as long) as long
  dim arrcopy() as long
  arrcopy=arr
  'изменяем arrcopy, arr не трогаем
end function


Не, ну до такого я тоже в конце концов додумался. Я думал как-то хитрее можно...

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

Сообщение alibek » 15.11.2004 (Пн) 17:58

Matew, изменять (с Preserve) можно только только последнее измерение.

Nicht Shiessen, если массив числового типа, то можно попробовать функцию API CopyMemory.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 16.11.2004 (Вт) 16:08

Если данных много то лучше
пользуй Recordset

1. Проще привязать к гриду.
2. Сортировка
3. Поиск
5. Экспорт
6. прочие блага ADO


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

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

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

    TopList  
cron