Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Программа глючит на ровном месте. Добавлено: 23.05.07 16:41  

Автор вопроса:  WFS
У меня была программа из пяти форм.
Я добавил еще 2 формы и пошли глюки.
например не хочет удалять строки из Flexgrida.
или если я описываю три переменные подряд:

Global s1, s2, sdmin As Double
то во время работы выдает ошибку. Если по раздельности их описывать, то нет ошибки.

Ответить

  Ответы Всего ответов: 21  

Номер ответа: 1
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #1 Добавлено: 23.05.07 16:44
хах
чтоб ты знал так переменные в ВБ не оглашаются
Переменные можно объявлять и в одной строчке, разделяя объявления запятыми:

Dim a As Long, b As Integer


Здесь очень важно заметить следующую особенность. Логично было бы объявить 3 переменные типа Long следующим образом:

Dim a, b, c As Long


Такая привычка могла перейти, например, из языка C. Там все переменные действительно имели бы тот тип, который указан после последней переменной. Но не в Visual Basic! В результате такого объявления VB объявит 3 переменные, первая и вторая будут иметь тип Variant, и только третья -Long!

Ответить

Номер ответа: 2
Автор ответа:
 WFS



Вопросов: 12
Ответов: 19
 Профиль | | #2 Добавлено: 23.05.07 16:54
Офигеть.
Но все равно, если переменная не Дабл, а вариант, то это просто экономит память. почему из-за этого возникало переполнение overflow?
И почему он упрямо не хочет удалять строки из флексгрида? 4 удалил, а пятую ни в какую?

Ответить

Номер ответа: 3
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #3 Добавлено: 23.05.07 16:58
с флексгридом не знаю, а почему у тебя оверфловы знаю.

когда ты первый раз используешь тип вариант и вносишь туда значение (пускай 5), то он становится тип Байт.. и когда поом ты туда кидаешь значение выше 255, то у тебя получаютСо оверфловы

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 23.05.07 18:50
когда ты первый раз используешь тип вариант и вносишь туда значение (пускай 5), то он становится тип Байт..
А помойму variant он и в variant вариант, причём в любом случае. Никакой автоматической типизации до 2007 студии (которая пока Beta) нигде нет.

Ответить

Номер ответа: 5
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #5
Добавлено: 23.05.07 22:30
если переменная не Дабл, а вариант, то это просто экономит память

Double - 8 байт
Variant - 16 байт + 1 для каждого символа.

Global s1, s2, sdmin As Double

Чё это за Глобал? Ты там на VB3 пишешь что ли? Или это Net? Если Net, тогда молчу :), а если нет, то чем тебе Public то не нравится?

На счет переменных х.з.
Скорее всего не в объявлении дело, а в процедурах.

Ответить

Номер ответа: 6
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #6 Добавлено: 23.05.07 22:38
А помойму variant он и в variant вариант, причём в любом случае. Никакой автоматической типизации до 2007 студии (которая пока Beta) нигде нет.


..не знаю.. Вот что я читал:

Переменная типа Variant может содержать данные любого типа. Visual Basic автоматически производит необходимые преобразования данных, поэтому не стоит беспокоится об этом. Использование такого типа данных замедляет работу программы, т.е. требуется время и ресурсы для преобразования типов. Поэтому рекомендую всегда воздерживаться от применения этого типа данных, за исключением специфических случаев, например, возвращение функцией массива возможно только при использовании типа Variant.

Ответить

Номер ответа: 7
Автор ответа:
 WFS



Вопросов: 12
Ответов: 19
 Профиль | | #7 Добавлено: 23.05.07 22:49
  Глобал - это означает, что область действия переменной распространяется на все модули в данной программе. Я просто дорабатываю готовую прогу, которая писалась в конце 90х. Наверно это из вб3, хотя 6й тоже понимает.

Так все таки, может ли влиять на работу программы то, что она очень большая?

PS Для меня было открытием узнать, что переменные описываются по отдельности:)

Ответить

Номер ответа: 8
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #8
Добавлено: 23.05.07 22:55
..не знаю.. Вот что я читал:

Переменная типа Variant может содержать данные любого типа. Visual Basic автоматически производит необходимые преобразования данных, поэтому не стоит беспокоится об этом. Использование такого типа данных замедляет работу программы, т.е. требуется время и ресурсы для преобразования типов. Поэтому рекомендую всегда воздерживаться от применения этого типа данных, за исключением специфических случаев, например, возвращение функцией массива возможно только при использовании типа Variant.

И где тут про то, что если ты вбил в вариант число 255, то 256 туда уже не влезет?

Ответить

Номер ответа: 9
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #9
Добавлено: 23.05.07 23:03
может ли влиять на работу программы то, что она очень большая?

ИМХО нет. Но это может здорово повлиять на время компиляции :)
А сколько это "очень большая"?
Вот у меня в одной было 290 кб кода и она до сих пор нормально работает :)

Ответить

Номер ответа: 10
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #10 Добавлено: 23.05.07 23:17
Глобал от Паблик отличается тем, что при вызове паблик переменной надо указывать полный путь типа
модуль1.переменная1
, а когда глобал, то можно просто
переменная1

Ответить

Номер ответа: 11
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #11 Добавлено: 23.05.07 23:19
..и ещё может быть такое:
Dim a As Byte
Dim b As Byte
Dim c As Long

a = 200
b = 200

c = a + b

Казалось бы, что если запустить такой код на выполнение, то в переменной c будет находиться значение 400 (200 + 200). Но не тут-то было :(. Visual Basic на строке c = a + b сгенерирует ошибку Overflow (Переполнение). Дело в том, что в выражении справа от знака равно складываются 2 переменные типа Byte, и Visual Basic решает, что после вычисления этого выражения, должен остаться тот же тип - Byte. Но если вспомнить то, что тип Byte может хранить значения в диапазоне 0-255, можно понять почему VB генерирует Overflow (Переполнение). 400 далеко выходит за диапазон Byte... Здесь может возникнуть вопрос: "А как же быть? Объявлять переменные a и b типом Long?". Можно поступить и так. А можно воспользоваться функций преобразования типа CLng.

Ответить

Номер ответа: 12
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #12
Добавлено: 23.05.07 23:34
Глобал от Паблик отличается тем, что при вызове паблик переменной надо указывать полный путь

Это кто тебе такое сказал? :)

Ответить

Номер ответа: 13
Автор ответа:
 Silver Ferrum



ICQ: 422640045 

Вопросов: 12
Ответов: 144
 Профиль | | #13 Добавлено: 23.05.07 23:49
..сам проверил.. и ты проверь

Ответить

Номер ответа: 14
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #14
Добавлено: 24.05.07 00:21
Если мы про модуль формы, то действительно при вызове public переменных, описанных в модуле формы из других модулей нужно указывать "полный путь" :), но объявлять переменные как global там запрещено, так что видимо мы говорим о глобальных модулях. А если мы говорим о глобальных модулях, то никакого полного пути не нужно.
Моя твоя убедил?

Ответить

Номер ответа: 15
Автор ответа:
 WFS



Вопросов: 12
Ответов: 19
 Профиль | | #15 Добавлено: 24.05.07 01:11
В глобальных модулях можно писать и паблик, и глобал - результат будет один и тот же: переменную можно просто вызывать по имени.

А вот если описать переменную паблик в модуле формы, то она не будет доступна из других модулей. Нужно писать путь,наверно.

Ответить

Страница: 1 | 2 |

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



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