C O N T A C T S


MS Visual Basic Tips (Советы)

  1. Использование ASCII кода чувствительно быстрее использования символа например: If Left$(a$, 1) = " " Then и If Asc(a$) = 32 Then. Второе примерно на 40 процентов быстрее
  2. При частом поиске в массиве, содержание которого не меняется, часто имеет смысл подумать о сортировке. Сортировка обычно - медленное занятие но, кстати сортировка с использованием Hash tables (не знаю как поточнее перевести)может ускорить процесс сортировки на ПОРЯДОК!
  3. Используйте "\" вместо "/" при делении целых. Избегайте лишних неявных преобразований, т.к. оператор "/" возвращает значение Single. Имейте в виду, что оператор "/" возвращает значение Double, если, по крайней мере, один из элементов имеет тип Double
  4. При частом поиске в массиве, содержание которого не меняется, часто имеет смысл подумать о сортировке. Сортировка обычно - медленное занятие но, кстати сортировка с использованием Hash tables (не знаю как поточнее перевести)может ускорить процесс сортировки на ПОРЯДОК!
  5. Используйте "\" вместо "/" при делении целых. Избегайте лишних неявных преобразований, т.к. оператор "/" возвращает значение Single. Имейте в виду, что оператор "/" возвращает значение Double, если, по крайней мере, один из элементов имеет тип Double
  6. Иногда Вы можете заменить весь If...Else блок более простой операцией Boolean. Например, Вы можете заменить этот код: If x > 0 Then y = 1 Else y = 0 На другой, хотя и весьма загадочный: y = -(x > 0)
  7. Во избежание ошибок в коде Бейсика используйте Option Explicit
  8. Во избежания логических хошибок в массивах не используйте корявых Option Base
  9. Не используйте GoSub...Return, если Вам небезынтересен вопрос “совместимости вверх”
  10. Для нахождения объявления пользовательской функции выполните правый щелчек мышью на ее имени, затем выберите Definition
  11. Выполните {drive}:\{Path to VB.exe}\VB.exe /? для дополнительсной информации
  12. Чтобы процедура или функция выполнялась именно после появления формы на экране, используйте Form_Paint, а не Form_Load
  13. Директория с установленной Windows определяется также через Replace(Environ$(4), “winbootdir=”)
  14. Чтобы вернуться к недавно обрабатываемому фрагменту кода, нажмите Ctrl+Shift+F2
  15. Используйте Me вместо имен формы - это избавит от необходимости коррекции кода после ее переименования
  16. При присваивании объектам свойств используется кл. слово Set
  17. Для нахождения позиции последнего встречающегося символа в строке используйте InstrRev
  18. MsgBox Dir$({Path})=vbNullString скажет, действительно ли директрия пуста
  19. В MultiSelection-списках удаление элементов следует производить с конца
  20. For i = List1.ListCount -1 Step -1...Next произведет перебор в списке в обратном направлении
  21. В наборах последний индекс соответствует количеству, а первый - 1
  22. Чтобы сделать свойство объекта только для чтения, удалите процедуру Property Let(Set)
  23. Перед выходом из программы уберите за собой, используя Set {ObjName} = Nothing
  24. Вместо Dim {VarName} As String в динамическом объявлении используйте VarName$
  25. Совмещайте Str({AnyNumeric}) c Trim
  26. Вследствие действия API-функции Ваше окно может оказаться Always-On-Top, и только vbSystemModal сможет вытащить MsgBox поверх такого окна
  27. SaveSettings сохраняет переменные и их значения
  28. CallByName интерпретирует код Бейсика
  29. Чтобы можно было затаскивать папки и файлы извне, установите OLEDrag... в Manual и используйте событие OLEDragDrop, а также объект Data
  30. Dim в стандартном модуле - не глобальная переменная
  31. Нажатие на Label, у которого Caption = “&Click me”, переведет фокус к следующему по таб-индексу ЭУ
  32. Используйте Select Case для выбора вариантов
  33. Комбинируйте InStr с UCase или LCase в случаях с нечувствительностью к регистру
  34. В CommonDialogs при выборе файла не забудьте прописать CancelError
  35. Если программа начинает работу с Sub Main(), Unload Me для формы не завершит приложение
  36. Используйте FreeFile во избежание ошибок доступа при открытии файлов
  37. Для рисованных кнопок используйте Click для рабочих процедур, а MouseDown и MouseUp - для внешнего вида конопок (Image, PictureBox)
  38. StrRev разворачивает строку (в VB 6.0)
  39. В списках с длинными строками используйте хотя бы ToolTipText для отображения информации
  40. Блокирование текстового поля без изменения вида возможно только путем помещения его в PictureBox, для которого и задают Enabled
  41. Для отлова не-Numeric-символов используйте IsNumeric(Chr$(KeyCode)) наряду с KeyCode = 0 в событии KeyPress
  42. Отмена закрытия формы нажатием на системном “крестике” возможна помещением в процедуру QueryUnload кода: Cancel = 1
  43. Для выхода из циклов For...Next используйте Exit For
  44. Для тестирования командной строки используйте диалог “Свойства проекта” и Command Line Aruments
  45. Перевод длинных строк в IDE VB реализуется с помощью & _
  46. При объявлении нескольких переменных в одну строку не забудьте указывать для каждой ее тип
  47. Иногда AutoSize элемента управления Label смотрится нехорошо. Используйте величины TextWidth и TextHeight
  48. Используйте переменные в защищенных (PasswordChar) текстовых полях: это не позволит отобразить текст через API
  49. Готовое приложение можно использовать как шаблон., если поместить все компоненты проекта в папку шаблонов
  50. WithEvents в классе может сократить время написания программы, а также ее объем, если объявить переменные в форме-контейнере. При этом WithEvents должен оперировать именами этих переменных, переданных как свойство класса
  51. DoEvents позволяет реагировать на действия пользователя в затяжных циклах
  52. With сокращает доступ к объектам: With Form1.Label1. При этом обращение к свойствам будет таким: .Caption = Now
  53. Выделение всего текста в полях реализуется установкой свойства SelStart в ноль и SelLength в длину этого поля
  54. www.vb.kiev.ua - лучшее место для учебы Бейсику
  55. Помещенная на форму кнопка со свойством Default, равным True, забирает фокус у текстовых полей - используйте таймер и метод SetFocus
  56. Пиктограмма файлов вашего приложения может отличаться от пиктограммы EXE - достаточно насовать в RES “иконок”, а в Реестре указать другой индекс
  57. Быстрый ввод текста из файла можео реализовать так: Text1 = Input(LOF(i), i) после оператора Open...
  58. tapiRequestmakeCall из TAPI32.DLL поможет Вам дозвониться без участия ЭУ Comm
  59. API-функция ShowCursor с передаваемой ей булевой переменной либо спрячет курсор, либо покажет его
  60. Свойство PrevInstance объекта App показыает, запущен ли экзепляр данного приложения
  61. SHAddToRecentDocs из Shell32.dll вносит в список документов ярлык открываемого файла, если имя файла не равно vbNullString
  62. Var = Shell(“rundll32.exe AppWiz.Cpl, NewLinkHere “ & App.Path & “\”, 1) запустит мастер ярлыков
  63. Считывание двоичного файла в пару строк кода: FileString = Space(FileLen({Path})) и get 1, FileString
  64. Var = Shell(“Regedit.exe /s c:\myreg.reg”) экспортирует Реестр в файл
  65. Бейсик позволяет писать код в одну строку через двоеточие, например, так -
    If txtPath = "" Then Beep: txtPath.SetFocus: Exit Sub
  66. Чтобы добавить символ табуляции в список или текстовое поле, нажмите Ctrl+i
  67. Бэйсик хранит константы в наипростейшей форме: скажем, константа, несущая единицу, хранится как целое. Если предполагается использование ее для действий с вещественными числами, обьявите ее явно: Const ONE As Double = 1
  68. Чтение и запись элемента массива всегда медленнее чем доступ к простой переменной. Следовательно, если Вы должны использовать тот же самый элемент массива в цикле неоднократно, Вы должны назначить временную переменную, содержащую этот элемент, и использовать именно ее В циклах повышение производительности может достигать 80 процентов!
  69. Никогда не используйте For Each на Variant массивах. Обычный For loop с индексом Integer или Long как минимум в двое быстрее. Будет работать быстрее и уменьшится потребление ресурсов, если Вы используете меньшее количество и более простые контроли. Hапример, не используйте маскедит, если Вы можете сделать все с регулярными текстбоксом. По той же самой причине, используйте лэйбл с рамкой вместо строки состояния или текстбокса только для чтения, имиджбокс всесто Тулбокса, маленький scrollbar вместо спинбаттон, и т.д.
  70. Никогда не используйте For Each на Variant массивах. Обычный For loop с Integer или Long индексом как минимум в двое быстрее.
  71. Данный код: If x = 0 And y = 0 Then равен этому: If (x Or y) = 0 Then
  72. При работе с матрицами используя вложенные циклы - внешний цикл должен выполнить итерации на столбцах, а внутренний - итерации на строках. (VB, сохраняет матрицы один столбец после другого) Программа вызывает меньшее количество "листаний"